perstack 0.0.78 → 0.0.79

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../package.json","../../src/lib/get-env.ts","../../src/lib/perstack-toml.ts","../../src/install.ts","../../src/lib/log/data-fetcher.ts","../../src/lib/log/filter.ts","../../src/lib/log/formatter.ts","../../src/log.ts","../../src/lib/provider-config.ts","../../src/lib/run-manager.ts","../../src/lib/context.ts","../../src/lib/interactive.ts","../../src/run.ts","../../src/tui/utils/event-queue.ts","../../src/tui/context/input-area-context.tsx","../../src/tui/helpers.ts","../../src/tui/constants.ts","../../../../packages/tui-components/src/hooks/use-latest-ref.ts","../../../../packages/tui-components/src/hooks/use-list-navigation.ts","../../../../packages/tui-components/src/hooks/use-text-input.ts","../../src/tui/components/list-browser.tsx","../../src/tui/components/input-areas/browsing-checkpoints.tsx","../../src/tui/components/input-areas/browsing-event-detail.tsx","../../src/tui/components/input-areas/browsing-events.tsx","../../src/tui/hooks/state/use-runtime-info.ts","../../src/tui/hooks/ui/use-expert-selector.ts","../../src/tui/components/expert-list.tsx","../../src/tui/components/expert-selector-base.tsx","../../src/tui/components/input-areas/browsing-experts.tsx","../../src/tui/components/input-areas/browsing-history.tsx","../../src/tui/components/browser-router.tsx","../../src/tui/components/action-row.tsx","../../src/tui/components/checkpoint-action-row.tsx","../../src/tui/components/run-setting.tsx","../../src/tui/components/streaming-display.tsx","../../src/tui/execution/components/activity-log-panel.tsx","../../src/tui/execution/components/continue-input-panel.tsx","../../src/tui/execution/components/status-panel.tsx","../../src/tui/execution/hooks/use-execution-state.ts","../../src/tui/execution/app.tsx","../../src/tui/execution/render.tsx","../../src/tui/selection/app.tsx","../../src/tui/selection/render.tsx","../../src/start.ts","../../bin/cli.ts"],"names":["path","readFile","TOML","Command","latestJob","checkpoint","events","result","getAllJobs","runtimeGetAllJobs","getAllRuns","runtimeGetAllRuns","getCheckpointsByJobId","runtimeGetCheckpointsByJobId","existsSync","getRunIdsByJobId","runtimeGetEventContents","parseWithFriendlyError","perstackRun","defaultRetrieveCheckpoint","retrieveJob","formatTimestamp","useState","useCallback","jsx","jsxs","Text","useInput","Box","Fragment","useMemo","useRun","useRef","useEffect","useApp","render","findLockfile","loadLockfile","createId","defaultStoreCheckpoint","defaultStoreEvent","storeJob","createInitialJob"],"mappings":";;;;;;;;;;;;;;;;;;AAAA,IAAA,eAAA,GAAA;AAAA,EACE,IAAA,EAAQ,UAAA;AAAA,EACR,OAAA,EAAW,QAAA;AAAA,EACX,WAAA,EAAe,cA2CjB,CAAA;AC5CO,SAAS,OAAO,OAAA,EAA2C;AAChE,EAAA,MAAM,MAA8B,MAAA,CAAO,WAAA;AAAA,IACzC,MAAA,CAAO,OAAA,CAAQ,OAAA,CAAQ,GAAG,CAAA,CACvB,OAAO,CAAC,CAAC,CAAA,EAAG,KAAK,CAAA,KAAM,CAAC,CAAC,KAAK,CAAA,CAC9B,GAAA,CAAI,CAAC,CAAC,GAAA,EAAK,KAAK,CAAA,KAAM,CAAC,GAAA,EAAK,KAAe,CAAC;AAAA,GACjD;AACA,EAAA,MAAA,CAAO,MAAA,CAAO,EAAE,IAAA,EAAM,OAAA,EAAS,YAAY,GAAA,EAAK,KAAA,EAAO,MAAM,CAAA;AAC7D,EAAA,OAAO,GAAA;AACT;ACLA,IAAM,oBAAA,GAAuB,CAAC,2BAA2B,CAAA;AAEzD,eAAsB,kBAAkB,UAAA,EAA8C;AACpF,EAAA,MAAM,YAAA,GAAe,MAAM,wBAAA,CAAyB,UAAU,CAAA;AAC9D,EAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,IAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,EACjF;AACA,EAAA,OAAO,MAAM,oBAAoB,YAAY,CAAA;AAC/C;AAEA,SAAS,YAAY,UAAA,EAA6B;AAChD,EAAA,MAAM,KAAA,GAAQ,WAAW,WAAA,EAAY;AACrC,EAAA,OAAO,MAAM,UAAA,CAAW,UAAU,CAAA,IAAK,KAAA,CAAM,WAAW,SAAS,CAAA;AACnE;AAEA,eAAe,kBAAkB,GAAA,EAA8B;AAC7D,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI;AACF,IAAA,MAAA,GAAS,IAAI,IAAI,GAAG,CAAA;AAAA,EACtB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,GAAG,CAAA,CAAE,CAAA;AAAA,EACrD;AACA,EAAA,IAAI,MAAA,CAAO,aAAa,QAAA,EAAU;AAChC,IAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,EAChD;AACA,EAAA,IAAI,CAAC,oBAAA,CAAqB,QAAA,CAAS,MAAA,CAAO,QAAQ,CAAA,EAAG;AACnD,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,iCAAA,EAAoC,qBAAqB,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,EACvF;AACA,EAAA,IAAI;AACF,IAAA,MAAM,WAAW,MAAM,KAAA,CAAM,KAAK,EAAE,QAAA,EAAU,SAAS,CAAA;AACvD,IAAA,IAAI,CAAC,SAAS,EAAA,EAAI;AAChB,MAAA,MAAM,IAAI,MAAM,CAAA,EAAG,QAAA,CAAS,MAAM,CAAA,CAAA,EAAI,QAAA,CAAS,UAAU,CAAA,CAAE,CAAA;AAAA,IAC7D;AACA,IAAA,OAAO,MAAM,SAAS,IAAA,EAAK;AAAA,EAC7B,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,+BAAA,EAAkC,OAAO,CAAA,CAAE,CAAA;AAAA,EAC7D;AACF;AAEA,eAAe,yBAAyB,UAAA,EAA6C;AACnF,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,IAAI,WAAA,CAAY,UAAU,CAAA,EAAG;AAC3B,MAAA,OAAO,MAAM,kBAAkB,UAAU,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI;AACF,MAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAASA,KAAA,CAAK,OAAA,CAAQ,QAAQ,GAAA,EAAI,EAAG,UAAU,CAAA,EAAG,OAAO,CAAA;AAClF,MAAA,OAAO,UAAA;AAAA,IACT,CAAA,CAAA,MAAQ;AACN,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,mBAAA,EAAsB,UAAU,CAAA,cAAA,CAAgB,CAAA;AAAA,IAClE;AAAA,EACF;AACA,EAAA,OAAO,MAAM,mCAAA,CAAoCA,KAAA,CAAK,QAAQ,OAAA,CAAQ,GAAA,EAAK,CAAC,CAAA;AAC9E;AAEA,eAAe,oCAAoC,GAAA,EAAqC;AACtF,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,MAAM,QAAA,CAASA,KAAA,CAAK,QAAQ,GAAA,EAAK,eAAe,GAAG,OAAO,CAAA;AAC7E,IAAA,OAAO,UAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI,GAAA,KAAQA,KAAA,CAAK,KAAA,CAAM,GAAG,EAAE,IAAA,EAAM;AAChC,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,OAAO,MAAM,mCAAA,CAAoCA,KAAA,CAAK,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,EACpE;AACF;AAEA,eAAe,oBAAoB,MAAA,EAAyC;AAC1E,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,KAAA,CAAM,MAAA,IAAU,EAAE,CAAA;AACpC,EAAA,OAAO,sBAAA,CAAuB,oBAAA,EAAsB,IAAA,EAAM,eAAe,CAAA;AAC3E;;;ACxDA,eAAe,eAAe,UAAA,EAAsC;AAClE,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAOA,KAAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,GAAA,IAAO,UAAU,CAAA;AAAA,EAC/C;AACA,EAAA,OAAO,MAAM,yBAAA,CAA0B,OAAA,CAAQ,GAAA,EAAK,CAAA;AACtD;AAEA,eAAe,0BAA0B,GAAA,EAA8B;AACrE,EAAA,MAAM,UAAA,GAAaA,KAAAA,CAAK,OAAA,CAAQ,GAAA,EAAK,eAAe,CAAA;AACpD,EAAA,IAAI;AACF,IAAA,MAAMC,SAAS,UAAU,CAAA;AACzB,IAAA,OAAO,UAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,IAAI,GAAA,KAAQD,KAAAA,CAAK,KAAA,CAAM,GAAG,EAAE,IAAA,EAAM;AAChC,MAAA,MAAM,IAAI,MAAM,+DAA+D,CAAA;AAAA,IACjF;AACA,IAAA,OAAO,MAAM,yBAAA,CAA0BA,KAAAA,CAAK,OAAA,CAAQ,GAAG,CAAC,CAAA;AAAA,EAC1D;AACF;AA0CA,SAAS,eAAA,CAAgB,KAAa,MAAA,EAAqC;AACzE,EAAA,MAAM,SAAgC,MAAA,CAAO,WAAA;AAAA,IAC3C,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAO,MAAA,IAAU,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,KAAK,CAAA,KAAM;AACzD,MAAA,QAAQ,MAAM,IAAA;AAAM,QAClB,KAAK,eAAA;AACH,UAAA,OAAO;AAAA,YACL,IAAA;AAAA,YACA;AAAA,cACE,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,IAAA;AAAA,cACA,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,EAAC;AAAA,cACrB,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,EAAC;AAAA,cACrB,SAAS,KAAA,CAAM,OAAA;AAAA,cACf,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,WAAA,EAAa,KAAA,CAAM,WAAA,IAAe,EAAC;AAAA,cACnC,QAAA,EAAU;AAAA;AACZ,WACF;AAAA,QACF,KAAK,aAAA;AACH,UAAA,OAAO;AAAA,YACL,IAAA;AAAA,YACA;AAAA,cACE,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,IAAA;AAAA,cACA,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,EAAC;AAAA,cACrB,IAAA,EAAM,KAAA,CAAM,IAAA,IAAQ,EAAC;AAAA,cACrB,UAAU,KAAA,CAAM,QAAA;AAAA,cAChB,QAAA,EAAU;AAAA;AACZ,WACF;AAAA,QACF,KAAK,kBAAA;AACH,UAAA,OAAO;AAAA,YACL,IAAA;AAAA,YACA;AAAA,cACE,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,IAAA;AAAA,cACA,aAAa,KAAA,CAAM,WAAA;AAAA,cACnB,MAAM,KAAA,CAAM,IAAA;AAAA,cACZ,OAAO,MAAA,CAAO,WAAA;AAAA,gBACZ,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAM,KAAK,CAAA,CAAE,IAAI,CAAC,CAAC,QAAA,EAAU,IAAI,CAAA,KAAM;AAAA,kBACpD,QAAA;AAAA,kBACA;AAAA,oBACE,IAAA,EAAM,QAAA;AAAA,oBACN,aAAa,IAAA,CAAK,WAAA;AAAA,oBAClB,WAAA,EAAa,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,eAAe;AAAA;AAC9C,iBACD;AAAA;AACH;AACF,WACF;AAAA,QACF,SAAS;AACP,UAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oBAAA,EAAwB,KAAA,CAA2B,IAAI,CAAA,CAAE,CAAA;AAAA,QAC3E;AAAA;AACF,IACF,CAAC;AAAA,GACH;AACA,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,iBAAA,EAAmB,OAAO,iBAAA,IAAqB,MAAA;AAAA,IAC/C,WAAA,EAAa,OAAO,WAAA,IAAe,EAAA;AAAA,IACnC,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,MAAA;AAAA,IACA,SAAA,EAAW,MAAA,CAAO,SAAA,IAAa,EAAC;AAAA,IAChC,IAAA,EAAM,MAAA,CAAO,IAAA,IAAQ;AAAC,GACxB;AACF;AAEA,SAAS,oBAAA,CACP,KACA,YAAA,EACQ;AACR,EAAA,OAAO,aAAa,KAAA,CAAM;AAAA,IACxB,GAAA;AAAA,IACA,IAAA,EAAM,GAAA;AAAA,IACN,OAAA,EAAS,aAAa,OAAA,IAAW,OAAA;AAAA,IACjC,aAAa,YAAA,CAAa,WAAA;AAAA,IAC1B,aAAa,YAAA,CAAa,WAAA;AAAA,IAC1B,QAAQ,YAAA,CAAa,MAAA;AAAA,IACrB,WAAW,YAAA,CAAa,SAAA;AAAA,IACxB,MAAM,YAAA,CAAa,IAAA;AAAA,IACnB,eAAe,YAAA,CAAa,aAAA;AAAA,IAC5B,gBAAgB,YAAA,CAAa,cAAA;AAAA,IAC7B,qBAAqB,YAAA,CAAa;AAAA,GACnC,CAAA;AACH;AAEA,eAAe,iBAAA,CACb,QACA,GAAA,EACiC;AACjC,EAAA,MAAM,UAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,CAAC,GAAA,EAAK,YAAY,CAAA,IAAK,MAAA,CAAO,QAAQ,MAAA,CAAO,OAAA,IAAW,EAAE,CAAA,EAAG;AACtE,IAAA,OAAA,CAAQ,GAAG,CAAA,GAAI,oBAAA,CAAqB,GAAA,EAAK,YAAY,CAAA;AAAA,EACvD;AACA,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAClC,EAAA,KAAA,MAAW,MAAA,IAAU,MAAA,CAAO,MAAA,CAAO,OAAO,CAAA,EAAG;AAC3C,IAAA,KAAA,MAAW,WAAA,IAAe,OAAO,SAAA,EAAW;AAC1C,MAAA,IAAI,CAAC,OAAA,CAAQ,WAAW,CAAA,EAAG;AACzB,QAAA,SAAA,CAAU,IAAI,WAAW,CAAA;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,IAAA,OAAO,OAAA;AAAA,EACT;AACA,EAAA,MAAM,SAAS,GAAA,CAAI,gBAAA;AACnB,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,MAAM,IAAI,MAAM,0DAA0D,CAAA;AAAA,EAC5E;AACA,EAAA,MAAM,SAAS,eAAA,CAAgB;AAAA,IAC7B,OAAA,EAAS,OAAO,kBAAA,IAAsB,yBAAA;AAAA,IACtC;AAAA,GACD,CAAA;AACD,EAAA,OAAO,SAAA,CAAU,OAAO,CAAA,EAAG;AACzB,IAAA,MAAM,WAAA,GAAc,SAAA,CAAU,MAAA,EAAO,CAAE,MAAK,CAAE,KAAA;AAC9C,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,SAAA,CAAU,OAAO,WAAW,CAAA;AAC5B,IAAA,IAAI,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC1B,IAAA,MAAM,MAAA,GAAS,MAAM,MAAA,CAAO,OAAA,CAAQ,IAAI,WAAW,CAAA;AACnD,IAAA,IAAI,CAAC,OAAO,EAAA,EAAI;AACd,MAAA,MAAM,IAAI,MAAM,CAAA,4BAAA,EAA+B,WAAW,MAAM,MAAA,CAAO,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IACxF;AACA,IAAA,MAAM,kBAAkB,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,UAAA,CAAW,QAAQ,WAAW,CAAA;AACvE,IAAA,IAAI,CAAC,eAAA,EAAiB;AACpB,MAAA,MAAM,IAAI,KAAA,CAAM,CAAA,QAAA,EAAW,WAAW,CAAA,2BAAA,CAA6B,CAAA;AAAA,IACrE;AACA,IAAA,OAAA,CAAQ,WAAW,CAAA,GAAI,eAAA,CAAgB,WAAA,EAAa,eAAe,CAAA;AACnE,IAAA,KAAA,MAAW,cAAA,IAAkB,eAAA,CAAgB,SAAA,IAAa,EAAC,EAAG;AAC5D,MAAA,IAAI,CAAC,OAAA,CAAQ,cAAc,CAAA,EAAG;AAC5B,QAAA,SAAA,CAAU,IAAI,cAAc,CAAA;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,sBAAA,CACP,QACA,eAAA,EAMgB;AAChB,EAAA,OAAO;AAAA,IACL,KAAK,MAAA,CAAO,GAAA;AAAA,IACZ,MAAM,MAAA,CAAO,IAAA;AAAA,IACb,SAAS,MAAA,CAAO,OAAA;AAAA,IAChB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,aAAa,MAAA,CAAO,WAAA;AAAA,IACpB,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,WAAW,MAAA,CAAO,SAAA;AAAA,IAClB,MAAM,MAAA,CAAO,IAAA;AAAA,IACb;AAAA,GACF;AACF;AAEA,SAAS,qBAAqB,QAAA,EAA4B;AACxD,EAAA,OAAOE,IAAAA,CAAK,UAAU,QAAQ,CAAA;AAChC;AAEO,IAAM,cAAA,GAAiB,IAAI,OAAA,EAAQ,CACvC,OAAA,CAAQ,SAAS,CAAA,CACjB,WAAA,CAAY,iEAAiE,CAAA,CAC7E,MAAA,CAAO,uBAAA,EAAyB,mCAAmC,CAAA,CACnE,MAAA;AAAA,EACC,mBAAA;AAAA,EACA,gEAAA;AAAA,EACA,CAAC,KAAA,EAAe,QAAA,KAAuB,QAAA,CAAS,OAAO,KAAK,CAAA;AAAA,EAC5D;AACF,CAAA,CACC,MAAA,CAAO,OAAO,OAAA,KAAY;AACzB,EAAA,IAAI;AACF,IAAA,MAAM,UAAA,GAAa,MAAM,cAAA,CAAe,OAAA,CAAQ,MAAM,CAAA;AACtD,IAAA,MAAM,MAAA,GAAS,MAAM,iBAAA,CAAkB,OAAA,CAAQ,MAAM,CAAA;AACrD,IAAA,MAAM,OAAA,GACJ,OAAA,CAAQ,OAAA,IAAW,OAAA,CAAQ,OAAA,CAAQ,MAAA,GAAS,CAAA,GACxC,OAAA,CAAQ,OAAA,GACP,MAAA,CAAO,OAAA,IAAW,CAAC,QAAQ,YAAY,CAAA;AAC9C,IAAA,MAAM,GAAA,GAAM,OAAO,OAAO,CAAA;AAC1B,IAAA,OAAA,CAAQ,IAAI,sBAAsB,CAAA;AAClC,IAAA,MAAM,OAAA,GAAU,MAAM,iBAAA,CAAkB,MAAA,EAAQ,GAAG,CAAA;AACnD,IAAA,OAAA,CAAQ,IAAI,CAAA,MAAA,EAAS,MAAA,CAAO,KAAK,OAAO,CAAA,CAAE,MAAM,CAAA,UAAA,CAAY,CAAA;AAC5D,IAAA,MAAM,kBAAkD,EAAC;AACzD,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,MAAM,KAAK,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,EAAG;AACnD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,gCAAA,EAAmC,GAAG,CAAA,GAAA,CAAK,CAAA;AACvD,MAAA,MAAM,eAAA,GAAkB,MAAM,+BAAA,CAAgC,MAAA,EAAQ;AAAA,QACpE,GAAA;AAAA,QACA,0BAA0B,MAAA,CAAO;AAAA,OAClC,CAAA;AACD,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,QAAA,EAAW,eAAA,CAAgB,MAAM,CAAA,QAAA,CAAU,CAAA;AACvD,MAAA,eAAA,CAAgB,GAAG,CAAA,GAAI,sBAAA,CAAuB,MAAA,EAAQ,eAAe,CAAA;AAAA,IACvE;AACA,IAAA,MAAM,QAAA,GAAqB;AAAA,MACzB,OAAA,EAAS,GAAA;AAAA,MACT,WAAA,EAAa,KAAK,GAAA,EAAI;AAAA,MACtB,UAAA,EAAYF,KAAAA,CAAK,QAAA,CAAS,UAAU,CAAA;AAAA,MACpC,OAAA,EAAS;AAAA,KACX;AACA,IAAA,MAAM,eAAeA,KAAAA,CAAK,IAAA,CAAKA,MAAK,OAAA,CAAQ,UAAU,GAAG,eAAe,CAAA;AACxE,IAAA,MAAM,eAAA,GAAkB,qBAAqB,QAAQ,CAAA;AACrD,IAAA,MAAM,SAAA,CAAU,YAAA,EAAc,eAAA,EAAiB,OAAO,CAAA;AACtD,IAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,UAAA,EAAa,YAAY,CAAA,CAAE,CAAA;AAAA,EACzC,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,OAAA,EAAU,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,IACrB;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF,CAAC,CAAA;ACvQI,SAAS,qBAAqB,OAAA,EAAyC;AAC5E,EAAA,OAAO;AAAA,IACL,MAAM,OAAO,KAAA,EAAyC;AAEpD,MAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,WAAA,CAAY,KAAK,CAAA;AAC3C,MAAA,IAAI,KAAK,OAAO,GAAA;AAEhB,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,qBAAA,CAAsB,KAAK,CAAA;AAC7D,MAAA,IAAI,WAAA,CAAY,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AACrC,MAAA,MAAM,eAAA,GAAkB,YAAY,CAAC,CAAA;AACrC,MAAA,MAAM,cAAA,GAAiB,WAAA,CAAY,WAAA,CAAY,MAAA,GAAS,CAAC,CAAA;AACzD,MAAA,OAAO;AAAA,QACL,EAAA,EAAI,KAAA;AAAA,QACJ,oBAAA,EAAsB,gBAAgB,MAAA,CAAO,GAAA;AAAA,QAC7C,cAAA,EAAgB,MAAA;AAAA,QAChB,YAAY,cAAA,CAAe,UAAA;AAAA,QAC3B,OAAO,cAAA,CAAe,KAAA;AAAA,QACtB,SAAA,EAAW,cAAA,CAAe,OAAA,CAAQ,WAAA,IAAe,KAAK,CAAA;AAAA,QACtD,UAAA,EAAY,KAAK,GAAA,EAAI;AAAA,QACrB,MAAA,EAAQ,cAAA,CAAe,MAAA,KAAW,WAAA,GAAc,WAAA,GAAc;AAAA,OAChE;AAAA,IACF,CAAA;AAAA,IAEA,MAAM,YAAA,GAAyC;AAE7C,MAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,UAAA,EAAW;AACtC,MAAA,IAAI,IAAA,CAAK,MAAA,GAAS,CAAA,EAAG,OAAO,KAAK,CAAC,CAAA;AAElC,MAAA,MAAM,MAAA,GAAS,QAAQ,SAAA,EAAU;AACjC,MAAA,IAAI,MAAA,CAAO,MAAA,KAAW,CAAA,EAAG,OAAO,MAAA;AAEhC,MAAA,MAAM,QAAA,GAAW,QAAQ,WAAA,EAAY;AACrC,MAAA,MAAM,YAAA,GAAe,OAClB,GAAA,CAAI,CAAC,QAAQ,EAAE,EAAA,EAAI,OAAO,cAAA,CAAe,QAAA,EAAU,EAAE,CAAA,EAAE,CAAE,EACzD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAK,CAAA;AACnC,MAAA,MAAM,WAAA,GAAc,YAAA,CAAa,CAAC,CAAA,CAAE,EAAA;AACpC,MAAA,OAAO,IAAA,CAAK,OAAO,WAAW,CAAA;AAAA,IAChC,CAAA;AAAA,IAEA,MAAM,QAAQ,KAAA,EAAsC;AAClD,MAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,UAAA,EAAW;AACtC,MAAA,MAAM,UAAU,IAAA,CAAK,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,UAAU,KAAK,CAAA;AACpD,MAAA,IAAI,OAAA,CAAQ,MAAA,GAAS,CAAA,EAAG,OAAO,OAAA;AAE/B,MAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,qBAAA,CAAsB,KAAK,CAAA;AAC7D,MAAA,MAAM,MAAA,GAAS,CAAC,GAAG,IAAI,GAAA,CAAI,WAAA,CAAY,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,KAAK,CAAC,CAAC,CAAA;AAE3D,MAAA,OAAO,OAAO,GAAA,CAAI,CAAC,WAAW,EAAE,KAAA,EAAO,OAAM,CAA2B,CAAA;AAAA,IAC1E,CAAA;AAAA,IAEA,MAAM,eAAe,KAAA,EAAsC;AACzD,MAAA,OAAO,OAAA,CAAQ,sBAAsB,KAAK,CAAA;AAAA,IAC5C,CAAA;AAAA,IAEA,MAAM,aAAA,CAAc,KAAA,EAAe,YAAA,EAA2C;AAC5E,MAAA,OAAO,OAAA,CAAQ,kBAAA,CAAmB,KAAA,EAAO,YAAY,CAAA;AAAA,IACvD,CAAA;AAAA,IAEA,MAAM,SAAA,CAAU,KAAA,EAAe,KAAA,EAAoC;AACjE,MAAA,OAAO,OAAA,CAAQ,gBAAA,CAAiB,KAAA,EAAO,KAAK,CAAA;AAAA,IAC9C,CAAA;AAAA,IAEA,MAAM,mBAAmB,KAAA,EAAoC;AAC3D,MAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,OAAA,CAAQ,KAAK,CAAA;AACrC,MAAA,MAAM,YAAwB,EAAC;AAC/B,MAAA,KAAA,MAAW,OAAO,IAAA,EAAM;AACtB,QAAA,MAAM,SAAS,MAAM,OAAA,CAAQ,gBAAA,CAAiB,KAAA,EAAO,IAAI,KAAK,CAAA;AAC9D,QAAA,SAAA,CAAU,IAAA,CAAK,GAAG,MAAM,CAAA;AAAA,MAC1B;AACA,MAAA,OAAO,SAAA,CAAU,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,SAAA,GAAY,EAAE,SAAS,CAAA;AAAA,IAC3D;AAAA,GACF;AACF;AAEA,SAAS,cAAA,CAAe,UAAkB,KAAA,EAAuB;AAC/D,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAASA,KAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,QAAQ,KAAK,CAAA;AAChD,IAAA,MAAM,KAAA,GAAQ,SAAS,MAAM,CAAA;AAC7B,IAAA,OAAO,KAAA,CAAM,OAAA;AAAA,EACf,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,KAAK,GAAA,EAAI;AAAA,EAClB;AACF;AAKO,SAAS,qBAAqB,QAAA,EAAkC;AACrE,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,YAAY,UAAA,EAAW;AAAA,IACnC,WAAA,EAAa,OAAO,KAAA,KAAU,WAAA,CAAY,KAAK,CAAA;AAAA,IAC/C,qBAAA,EAAuB,OAAO,KAAA,KAAU,qBAAA,CAAsB,KAAK,CAAA;AAAA,IACnE,oBAAoB,OAAO,KAAA,EAAO,YAAA,KAChC,yBAAA,CAA0B,OAAO,YAAY,CAAA;AAAA,IAC/C,gBAAA,EAAkB,OAAO,KAAA,EAAO,KAAA,EAAO,YAAY,gBAAA,CAAiB,KAAA,EAAO,OAAO,OAAO,CAAA;AAAA,IACzF,UAAA,EAAY,YAAY,UAAA,EAAW;AAAA,IACnC,WAAW,MAAM;AACf,MAAA,MAAM,OAAA,GAAUA,KAAAA,CAAK,IAAA,CAAK,QAAA,EAAU,MAAM,CAAA;AAC1C,MAAA,IAAI,CAAC,UAAA,CAAW,OAAO,CAAA,SAAU,EAAC;AAClC,MAAA,OAAO,YAAY,OAAA,EAAS,EAAE,eAAe,IAAA,EAAM,EAChD,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,CAAA,CAC7B,IAAI,CAAC,CAAA,KAAM,EAAE,IAAI,CAAA;AAAA,IACtB,CAAA;AAAA,IACA,aAAa,MAAM;AAAA,GACrB;AACF;;;ACxIO,IAAM,oCAAoB,IAAI,GAAA,CAAI,CAAC,gBAAA,EAAkB,OAAO,CAAC,CAAA;AAC7D,IAAM,gBAAA,uBAAuB,GAAA,CAAI;AAAA,EACtC,WAAA;AAAA,EACA,oBAAA;AAAA,EACA;AACF,CAAC,CAAA;AACM,IAAM,sBAAA,mBAAyB,IAAI,GAAA,CAAI,CAAC,mBAAmB,CAAC,CAAA;AAE5D,SAAS,gBAAgB,IAAA,EAA0B;AACxD,EAAA,MAAM,OAAA,GAAU,KAAK,IAAA,EAAK;AAC1B,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,CAAM,eAAe,CAAA;AAChD,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,CAAC,CAAC,CAAA;AAChC,IAAA,MAAM,GAAA,GAAM,MAAA,CAAO,UAAA,CAAW,CAAC,CAAC,CAAA;AAChC,IAAA,IAAI,MAAM,GAAA,EAAK;AACb,MAAA,MAAM,IAAI,MAAM,CAAA,oBAAA,EAAuB,IAAI,SAAS,GAAG,CAAA,OAAA,EAAU,GAAG,CAAA,CAAA,CAAG,CAAA;AAAA,IACzE;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,GAAA,EAAI;AAAA,EACnC;AACA,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA;AAC1C,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,EAAE,MAAM,KAAA,EAAO,KAAA,EAAO,OAAO,QAAA,CAAS,CAAC,CAAC,CAAA,EAAE;AAAA,EACnD;AACA,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AACxC,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAO,EAAE,MAAM,IAAA,EAAM,KAAA,EAAO,OAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAE;AAAA,EACjD;AACA,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,WAAW,CAAA;AAC1C,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,OAAO,EAAE,MAAM,KAAA,EAAO,KAAA,EAAO,OAAO,QAAA,CAAS,CAAC,CAAC,CAAA,EAAE;AAAA,EACnD;AACA,EAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,KAAA,CAAM,UAAU,CAAA;AACxC,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,OAAO,EAAE,MAAM,IAAA,EAAM,KAAA,EAAO,OAAO,OAAA,CAAQ,CAAC,CAAC,CAAA,EAAE;AAAA,EACjD;AACA,EAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,KAAA,CAAM,SAAS,CAAA;AAC1C,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,OAAO,EAAE,MAAM,OAAA,EAAS,KAAA,EAAO,OAAO,UAAA,CAAW,CAAC,CAAC,CAAA,EAAE;AAAA,EACvD;AACA,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,qBAAA,EAAwB,IAAI,CAAA,CAAE,CAAA;AAChD;AAEO,SAAS,sBAAsB,UAAA,EAAqC;AACzE,EAAA,MAAM,OAAA,GAAU,WAAW,IAAA,EAAK;AAChC,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,KAAA,CAAM,qDAAqD,CAAA;AACzF,EAAA,IAAI,CAAC,aAAA,EAAe;AAClB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,2BAAA,EAA8B,UAAU,CAAA,CAAE,CAAA;AAAA,EAC5D;AACA,EAAA,MAAM,GAAG,SAAA,EAAW,QAAA,EAAU,QAAQ,CAAA,GAAI,aAAA;AAC1C,EAAA,MAAM,YAAA,GAAe,SAAS,IAAA,EAAK;AACnC,EAAA,IAAI,iBAAiB,EAAA,EAAI;AACvB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,oCAAA,EAAuC,UAAU,CAAA,CAAE,CAAA;AAAA,EACrE;AACA,EAAA,MAAM,KAAA,GAAQ,eAAe,SAAS,CAAA;AACtC,EAAA,MAAM,KAAA,GAAQ,WAAW,YAAY,CAAA;AACrC,EAAA,OAAO,EAAE,KAAA,EAAO,QAAA,EAAmD,KAAA,EAAM;AAC3E;AAEA,SAAS,eAAeA,KAAAA,EAAwB;AAC9C,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,IAAI,OAAA,GAAU,EAAA;AACd,EAAA,IAAI,CAAA,GAAI,CAAA;AACR,EAAA,OAAO,CAAA,GAAIA,MAAK,MAAA,EAAQ;AACtB,IAAA,IAAIA,KAAAA,CAAK,CAAC,CAAA,KAAM,GAAA,EAAK;AACnB,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,QAAA,OAAA,GAAU,EAAA;AAAA,MACZ;AACA,MAAA,CAAA,EAAA;AAAA,IACF,CAAA,MAAA,IAAWA,MAAK,CAAC,CAAA,KAAM,OAAOA,KAAAA,CAAK,CAAA,GAAI,CAAC,CAAA,KAAM,GAAA,EAAK;AACjD,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAClB,QAAA,OAAA,GAAU,EAAA;AAAA,MACZ;AACA,MAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AACd,MAAA,CAAA,IAAK,CAAA;AAAA,IACP,CAAA,MAAO;AACL,MAAA,OAAA,IAAWA,MAAK,CAAC,CAAA;AACjB,MAAA,CAAA,EAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,KAAA,CAAM,KAAK,OAAO,CAAA;AAAA,EACpB;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,WAAW,GAAA,EAAwC;AAC1D,EAAA,IAAI,GAAA,KAAQ,QAAQ,OAAO,IAAA;AAC3B,EAAA,IAAI,GAAA,KAAQ,SAAS,OAAO,KAAA;AAC5B,EAAA,IAAI,IAAI,UAAA,CAAW,GAAG,KAAK,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AAC5C,IAAA,OAAO,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EACxB;AACA,EAAA,IAAI,IAAI,UAAA,CAAW,GAAG,KAAK,GAAA,CAAI,QAAA,CAAS,GAAG,CAAA,EAAG;AAC5C,IAAA,OAAO,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAAA,EACxB;AACA,EAAA,MAAM,GAAA,GAAM,OAAO,GAAG,CAAA;AACtB,EAAA,IAAI,CAAC,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA,EAAG;AACtB,IAAA,OAAO,GAAA;AAAA,EACT;AACA,EAAA,OAAO,GAAA;AACT;AAEO,SAAS,iBAAA,CAAkB,OAAiB,SAAA,EAAqC;AACtF,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAM,GAAI,SAAA;AACnC,EAAA,MAAM,WAAA,GAAc,aAAA,CAAc,KAAA,EAAO,KAAK,CAAA;AAC9C,EAAA,IAAI,gBAAgB,MAAA,EAAW;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,WAAW,CAAA,EAAG;AAC9B,IAAA,OAAO,WAAA,CAAY,KAAK,CAAC,CAAA,KAAM,cAAc,CAAA,EAAG,QAAA,EAAU,KAAK,CAAC,CAAA;AAAA,EAClE;AACA,EAAA,OAAO,aAAA,CAAc,WAAA,EAAa,QAAA,EAAU,KAAK,CAAA;AACnD;AAEA,SAAS,aAAA,CAAc,KAAcA,KAAAA,EAAyB;AAC5D,EAAA,IAAI,OAAA,GAAmB,GAAA;AACvB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAIA,KAAAA,CAAK,QAAQ,CAAA,EAAA,EAAK;AACpC,IAAA,MAAM,OAAA,GAAUA,MAAK,CAAC,CAAA;AACtB,IAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,OAAA,KAAY,MAAA,EAAW;AAC7C,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,IAAI,YAAY,GAAA,EAAK;AACnB,MAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA,EAAG;AAC3B,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,MAAM,aAAA,GAAgBA,KAAAA,CAAK,KAAA,CAAM,CAAA,GAAI,CAAC,CAAA;AACtC,MAAA,IAAI,aAAA,CAAc,WAAW,CAAA,EAAG;AAC9B,QAAA,OAAO,OAAA;AAAA,MACT;AACA,MAAA,OAAO,OAAA,CACJ,GAAA,CAAI,CAAC,IAAA,KAAS,aAAA,CAAc,IAAA,EAAM,aAAa,CAAC,CAAA,CAChD,MAAA,CAAO,CAAC,CAAA,KAAM,MAAM,MAAS,CAAA;AAAA,IAClC;AACA,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,MAAA,OAAO,MAAA;AAAA,IACT;AACA,IAAA,OAAA,GAAW,QAAoC,OAAO,CAAA;AAAA,EACxD;AACA,EAAA,OAAO,OAAA;AACT;AAEA,SAAS,aAAA,CACP,MAAA,EACA,QAAA,EACA,QAAA,EACS;AACT,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,IAAA;AACH,MAAA,OAAO,MAAA,KAAW,QAAA;AAAA,IACpB,KAAK,IAAA;AACH,MAAA,OAAO,MAAA,KAAW,QAAA;AAAA,IACpB,KAAK,GAAA;AACH,MAAA,OAAO,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,QAAA,KAAa,YAAY,MAAA,GAAS,QAAA;AAAA,IAChF,KAAK,IAAA;AACH,MAAA,OAAO,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,QAAA,KAAa,YAAY,MAAA,IAAU,QAAA;AAAA,IACjF,KAAK,GAAA;AACH,MAAA,OAAO,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,QAAA,KAAa,YAAY,MAAA,GAAS,QAAA;AAAA,IAChF,KAAK,IAAA;AACH,MAAA,OAAO,OAAO,MAAA,KAAW,QAAA,IAAY,OAAO,QAAA,KAAa,YAAY,MAAA,IAAU,QAAA;AAAA,IACjF;AACE,MAAA,OAAO,KAAA;AAAA;AAEb;AAEA,SAAS,iBAAA,CAAkB,YAAoB,MAAA,EAA6B;AAC1E,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,OAAA;AACH,MAAA,OAAO,eAAe,MAAA,CAAO,KAAA;AAAA,IAC/B,KAAK,IAAA;AACH,MAAA,OAAO,MAAA,CAAO,KAAA,KAAU,MAAA,IAAa,UAAA,GAAa,MAAA,CAAO,KAAA;AAAA,IAC3D,KAAK,KAAA;AACH,MAAA,OAAO,MAAA,CAAO,KAAA,KAAU,MAAA,IAAa,UAAA,IAAc,MAAA,CAAO,KAAA;AAAA,IAC5D,KAAK,IAAA;AACH,MAAA,OAAO,MAAA,CAAO,KAAA,KAAU,MAAA,IAAa,UAAA,GAAa,MAAA,CAAO,KAAA;AAAA,IAC3D,KAAK,KAAA;AACH,MAAA,OAAO,MAAA,CAAO,KAAA,KAAU,MAAA,IAAa,UAAA,IAAc,MAAA,CAAO,KAAA;AAAA,IAC5D,KAAK,OAAA;AACH,MAAA,OACE,MAAA,CAAO,GAAA,KAAQ,MAAA,IACf,MAAA,CAAO,GAAA,KAAQ,UACf,UAAA,IAAc,MAAA,CAAO,GAAA,IACrB,UAAA,IAAc,MAAA,CAAO,GAAA;AAAA,IAEzB;AACE,MAAA,OAAO,IAAA;AAAA;AAEb;AAQO,SAAS,YAAA,CAAa,QAAoB,OAAA,EAA4C;AAC3F,EAAA,IAAI,QAAA,GAAW,MAAA;AACf,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,QAAA,GAAW,QAAA,CAAS,OAAO,CAAC,CAAA,KAAM,kBAAkB,CAAA,CAAE,UAAA,EAAY,OAAA,CAAQ,IAAkB,CAAC,CAAA;AAAA,EAC/F;AACA,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,QAAA,GAAW,SAAS,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,QAAQ,IAAI,CAAA;AAAA,EAC3D;AACA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,QAAA,GAAW,QAAA,CAAS,OAAO,CAAC,CAAA,KAAM,kBAAkB,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EACjE;AACA,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,QAAA,GAAW,QAAA,CAAS,OAAO,CAAC,CAAA,KAAM,iBAAiB,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EAChE;AACA,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAA,QAAA,GAAW,QAAA,CAAS,OAAO,CAAC,CAAA,KAAM,uBAAuB,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAAA,EACtE;AACA,EAAA,IAAI,QAAQ,gBAAA,EAAkB;AAC5B,IAAA,QAAA,GAAW,QAAA,CAAS,MAAA;AAAA,MAAO,CAAC,CAAA,KAC1B,iBAAA,CAAkB,CAAA,EAAG,QAAQ,gBAAmC;AAAA,KAClE;AAAA,EACF;AAEA,EAAA,MAAM,wBAAwB,QAAA,CAAS,MAAA;AAEvC,EAAA,MAAM,MAAA,GAAS,QAAQ,MAAA,IAAU,CAAA;AACjC,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,QAAA,GAAW,QAAA,CAAS,MAAM,MAAM,CAAA;AAAA,EAClC;AACA,EAAA,IAAI,OAAA,CAAQ,IAAA,KAAS,MAAA,IAAa,OAAA,CAAQ,OAAO,CAAA,EAAG;AAClD,IAAA,QAAA,GAAW,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,IAAI,CAAA;AAAA,EAC3C;AAEA,EAAA,MAAM,yBAAyB,QAAA,CAAS,MAAA;AAExC,EAAA,IAAI,OAAA,CAAQ,OAAA,KAAY,MAAA,IAAa,OAAA,CAAQ,UAAU,CAAA,EAAG;AACxD,IAAA,QAAA,GAAW,gBAAA,CAAiB,MAAA,EAAQ,QAAA,EAAU,OAAA,CAAQ,OAAO,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO,EAAE,MAAA,EAAQ,QAAA,EAAU,qBAAA,EAAuB,sBAAA,EAAuB;AAC3E;AAEA,SAAS,gBAAA,CACP,SAAA,EACA,aAAA,EACA,WAAA,EACY;AACZ,EAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,aAAA,CAAc,IAAI,CAAC,CAAA,KAAM,CAAA,CAAE,EAAE,CAAC,CAAA;AACzD,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAClC,EAAA,KAAA,MAAW,SAAS,aAAA,EAAe;AACjC,IAAA,MAAM,KAAA,GAAQ,UAAU,SAAA,CAAU,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,MAAM,EAAE,CAAA;AAC1D,IAAA,IAAI,UAAU,EAAA,EAAI;AAClB,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,WAAW,CAAA;AAC7C,IAAA,MAAM,MAAM,IAAA,CAAK,GAAA,CAAI,UAAU,MAAA,GAAS,CAAA,EAAG,QAAQ,WAAW,CAAA;AAC9D,IAAA,KAAA,IAAS,CAAA,GAAI,KAAA,EAAO,CAAA,IAAK,GAAA,EAAK,CAAA,EAAA,EAAK;AACjC,MAAA,SAAA,CAAU,GAAA,CAAI,SAAA,CAAU,CAAC,CAAA,CAAE,EAAE,CAAA;AAAA,IAC/B;AAAA,EACF;AACA,EAAA,OAAO,SAAA,CAAU,MAAA,CAAO,CAAC,CAAA,KAAM,SAAA,CAAU,GAAA,CAAI,CAAA,CAAE,EAAE,CAAA,IAAK,UAAA,CAAW,GAAA,CAAI,CAAA,CAAE,EAAE,CAAC,CAAA;AAC5E;;;AC5PO,SAAS,cAAc,MAAA,EAAgC;AAC5D,EAAA,IAAI,MAAA,CAAO,WAAW,CAAA,EAAG;AACvB,IAAA,OAAO;AAAA,MACL,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY,CAAA;AAAA,MACZ,aAAA,EAAe,CAAA;AAAA,MACf,eAAA,EAAiB;AAAA,KACnB;AAAA,EACF;AACA,EAAA,MAAM,cAAc,MAAA,CAAO,GAAA,CAAI,CAAC,CAAA,KAAM,EAAE,UAAU,CAAA;AAClD,EAAA,OAAO;AAAA,IACL,aAAa,MAAA,CAAO,MAAA;AAAA,IACpB,UAAA,EAAY,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,kBAAkB,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,MAAA;AAAA,IAChE,aAAA,EAAe,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,iBAAiB,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,MAAA;AAAA,IAClE,eAAA,EAAiB,MAAA,CAAO,MAAA,CAAO,CAAC,CAAA,KAAM,uBAAuB,GAAA,CAAI,CAAA,CAAE,IAAI,CAAC,CAAA,CAAE,MAAA;AAAA,IAC1E,SAAA,EAAW,EAAE,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAG,WAAW,CAAA,EAAG,GAAA,EAAK,IAAA,CAAK,GAAA,CAAI,GAAG,WAAW,CAAA;AAAE,GAC5E;AACF;AAEO,SAAS,UAAA,CAAW,QAAmB,OAAA,EAAmC;AAC/E,EAAA,MAAM,IAAA,GAAgC;AAAA,IACpC,KAAK,MAAA,CAAO,GAAA;AAAA,IACZ,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,SAAS,MAAA,CAAO;AAAA,GAClB;AAEA,EAAA,IAAI,OAAO,UAAA,EAAY;AACrB,IAAA,IAAA,CAAK,aAAa,MAAA,CAAO,UAAA;AAAA,EAC3B;AACA,EAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,WAAA,CAAY,SAAS,CAAA,EAAG;AACvD,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,WAAA;AAAA,EAC5B;AACA,EAAA,IAAI,OAAO,WAAA,EAAa;AACtB,IAAA,IAAA,CAAK,WAAA,GAAc,IAAA;AAAA,EACrB;AACA,EAAA,IAAI,OAAO,WAAA,EAAa;AACtB,IAAA,IAAA,CAAK,cAAc,MAAA,CAAO,WAAA;AAAA,EAC5B;AACA,EAAA,IAAI,MAAA,CAAO,2BAA2B,MAAA,EAAW;AAC/C,IAAA,IAAA,CAAK,yBAAyB,MAAA,CAAO,sBAAA;AAAA,EACvC;AACA,EAAA,IAAI,MAAA,CAAO,2BAA2B,MAAA,EAAW;AAC/C,IAAA,IAAA,CAAK,yBAAyB,MAAA,CAAO,sBAAA;AAAA,EACvC;AACA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,OAAO,IAAA,CAAK,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,CAAC,CAAA;AAAA,EACrC;AACA,EAAA,OAAO,IAAA,CAAK,UAAU,IAAI,CAAA;AAC5B;AAEO,SAAS,cAAA,CAAe,QAAmB,OAAA,EAAmC;AACnF,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI,OAAO,WAAA,EAAa;AACtB,IAAA,KAAA,CAAM,KAAK,sBAAsB,CAAA;AACjC,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AACA,EAAA,IAAI,OAAO,WAAA,EAAa;AACtB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,MAAA,CAAO,WAAW,CAAA,CAAE,CAAA;AAC3C,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AACA,EAAA,IAAI,OAAO,GAAA,EAAK;AACd,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,eAAA,CAAgB,MAAA,CAAO,GAAG,CAAC,CAAA;AACzC,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AACA,EAAA,IAAI,MAAA,CAAO,UAAA,IAAc,OAAA,CAAQ,QAAA,EAAU;AACzC,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,4BAAA,CAA6B,MAAA,CAAO,UAAU,CAAC,CAAA;AAC7D,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf,CAAA,MAAA,IAAW,OAAO,UAAA,EAAY;AAC5B,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,sBAAA,CAAuB,MAAA,CAAO,UAAU,CAAC,CAAA;AACvD,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AACA,EAAA,IAAI,OAAA,CAAQ,OAAA,IAAW,MAAA,CAAO,OAAA,EAAS;AACrC,IAAA,KAAA,CAAM,IAAA,CAAK,GAAG,oBAAA,CAAqB,MAAA,CAAO,OAAO,CAAC,CAAA;AAClD,IAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AAAA,EACf;AACA,EAAA,IAAI,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,CAAA,EAAG;AAC5B,IAAA,KAAA,CAAM,KAAK,SAAS,CAAA;AACpB,IAAA,KAAA,CAAM,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AACzB,IAAA,KAAA,MAAW,KAAA,IAAS,OAAO,MAAA,EAAQ;AACjC,MAAA,KAAA,CAAM,KAAK,GAAG,WAAA,CAAY,KAAA,EAAO,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA,IACnD;AACA,IAAA,KAAA,CAAM,IAAA,CAAK,QAAA,CAAI,MAAA,CAAO,EAAE,CAAC,CAAA;AAIzB,IAAA,IACE,MAAA,CAAO,2BAA2B,MAAA,IAClC,MAAA,CAAO,2BAA2B,MAAA,IAClC,MAAA,CAAO,sBAAA,GAAyB,MAAA,CAAO,sBAAA,EACvC;AACA,MAAA,MAAM,WAAA,GACJ,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,sBAAA,GAC1B,CAAA,GAAA,EAAM,MAAA,CAAO,MAAA,CAAO,MAAA,GAAS,MAAA,CAAO,sBAAsB,CAAA,SAAA,CAAA,GAC1D,EAAA;AACN,MAAA,KAAA,CAAM,IAAA;AAAA,QACJ,YAAY,MAAA,CAAO,sBAAsB,OAAO,MAAA,CAAO,sBAAsB,kBAAkB,WAAW,CAAA,CAAA;AAAA,OAC5G;AACA,MAAA,KAAA,CAAM,KAAK,CAAA,wDAAA,CAA0D,CAAA;AAAA,IACvE;AAAA,EACF,WAAW,MAAA,CAAO,sBAAA,KAA2B,MAAA,IAAa,MAAA,CAAO,yBAAyB,CAAA,EAAG;AAC3F,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAI,MAAA,CAAO,sBAAsB,CAAA,wCAAA,CAA0C,CAAA;AAAA,EACxF;AACA,EAAA,OAAO,KAAA,CAAM,KAAK,IAAI,CAAA;AACxB;AAEA,SAAS,gBAAgB,GAAA,EAAoB;AAC3C,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,KAAK,CAAA,KAAA,EAAQ,GAAA,CAAI,EAAE,CAAA,EAAA,EAAK,GAAA,CAAI,MAAM,CAAA,CAAA,CAAG,CAAA;AAC3C,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,GAAA,CAAI,oBAAoB,CAAA,CAAE,CAAA;AAChD,EAAA,KAAA,CAAM,KAAK,CAAA,SAAA,EAAY,eAAA,CAAgB,GAAA,CAAI,SAAS,CAAC,CAAA,CAAE,CAAA;AACvD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,OAAA,EAAU,GAAA,CAAI,UAAU,CAAA,CAAE,CAAA;AACrC,EAAA,IAAI,IAAI,UAAA,EAAY;AAClB,IAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,eAAA,CAAgB,GAAA,CAAI,UAAU,CAAC,CAAA,CAAE,CAAA;AAAA,EAC3D;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,uBAAuB,UAAA,EAAkC;AAChE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,YAAA,EAAe,UAAA,CAAW,EAAE,CAAA,CAAE,CAAA;AACzC,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,UAAA,CAAW,MAAM,CAAA,CAAE,CAAA;AACzC,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,MAAA,EAAS,UAAA,CAAW,UAAU,CAAA,CAAE,CAAA;AAC3C,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,QAAA,EAAW,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AAC7C,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,6BAA6B,UAAA,EAAkC;AACtE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,IAAA,CAAK,GAAG,sBAAA,CAAuB,UAAU,CAAC,CAAA;AAChD,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,KAAA,CAAM,KAAK,WAAW,CAAA;AACtB,EAAA,KAAA,MAAW,GAAA,IAAO,WAAW,QAAA,EAAU;AACrC,IAAA,MAAM,OAAA,GAAU,kBAAA,CAAmB,GAAA,CAAI,QAAQ,CAAA;AAC/C,IAAA,MAAM,OAAA,GAAU,OAAA,CAAQ,MAAA,GAAS,GAAA,GAAM,CAAA,EAAG,QAAQ,KAAA,CAAM,CAAA,EAAG,GAAG,CAAC,CAAA,GAAA,CAAA,GAAQ,OAAA;AACvE,IAAA,KAAA,CAAM,KAAK,CAAA,GAAA,EAAM,GAAA,CAAI,IAAI,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,EACzC;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,qBAAqB,OAAA,EAA+B;AAC3D,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,KAAA,CAAM,KAAK,UAAU,CAAA;AACrB,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,gBAAA,EAAmB,OAAA,CAAQ,WAAW,CAAA,CAAE,CAAA;AACnD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,OAAA,CAAQ,UAAU,CAAA,CAAE,CAAA;AAC5C,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,cAAA,EAAiB,OAAA,CAAQ,aAAa,CAAA,CAAE,CAAA;AACnD,EAAA,KAAA,CAAM,IAAA,CAAK,CAAA,eAAA,EAAkB,OAAA,CAAQ,eAAe,CAAA,CAAE,CAAA;AACtD,EAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,IAAA,KAAA,CAAM,IAAA,CAAK,iBAAiB,OAAA,CAAQ,SAAA,CAAU,GAAG,CAAA,GAAA,EAAM,OAAA,CAAQ,SAAA,CAAU,GAAG,CAAA,CAAE,CAAA;AAAA,EAChF;AACA,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,WAAA,CAAY,OAAiB,OAAA,EAA4B;AAChE,EAAA,MAAM,QAAkB,EAAC;AACzB,EAAA,MAAM,IAAA,GAAO,UAAA,CAAW,KAAA,CAAM,SAAS,CAAA;AACvC,EAAA,MAAM,MAAA,GAAS,SAAS,KAAA,CAAM,UAAU,KAAK,KAAA,CAAM,IAAI,GAAG,GAAA,CAAI,MAAA,CAAO,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,IAAA,CAAK,MAAM,CAAC,CAAC,GAAG,IAAI,CAAA,CAAA;AAChH,EAAA,KAAA,CAAM,KAAK,MAAM,CAAA;AACjB,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,UAAA,IAAc,eAAA,IAAmB,KAAA,EAAO;AACzD,IAAA,MAAM,UAAA,GAAa,KAAA;AACnB,IAAA,MAAM,OAAA,GAAU,WAAW,aAAA,CAAc,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,aAAa,CAAA;AAC7E,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,OAAA,CAAQ,QAAQ,CAAA;AAChD,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,GAAS,EAAA,GAAK,CAAA,EAAG,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,GAAA,CAAA,GAAQ,IAAA;AAC/D,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,OAAO,CAAA,CAAA,CAAG,CAAA;AAAA,IACpC;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,WAAA,IAAe,WAAA,IAAe,KAAA,EAAO;AACtD,IAAA,MAAM,SAAA,GAAY,KAAA;AAGlB,IAAA,IAAI,OAAA,EAAS;AACX,MAAA,KAAA,MAAW,EAAA,IAAM,UAAU,SAAA,EAAW;AACpC,QAAA,KAAA,CAAM,KAAK,CAAA,GAAA,EAAM,EAAA,CAAG,SAAS,CAAA,EAAA,EAAK,EAAA,CAAG,QAAQ,CAAA,CAAE,CAAA;AAC/C,QAAA,KAAA,CAAM,KAAK,CAAA,UAAA,EAAa,IAAA,CAAK,UAAU,EAAA,CAAG,IAAI,CAAC,CAAA,CAAE,CAAA;AAAA,MACnD;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,SAAA,GAAY,SAAA,CAAU,SAAA,CAAU,GAAA,CAAI,CAAC,OAAO,EAAA,CAAG,QAAQ,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AACxE,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,SAAS,CAAA,CAAE,CAAA;AAAA,IACpC;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,oBAAA,IAAwB,aAAA,IAAiB,KAAA,EAAO;AACjE,IAAA,MAAM,WAAA,GAAc,KAAA;AACpB,IAAA,KAAA,MAAW,EAAA,IAAM,YAAY,WAAA,EAAa;AACxC,MAAA,MAAM,IAAA,GAAO,kBAAA,CAAmB,EAAA,CAAG,MAAM,CAAA;AACzC,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,WAAA,EAAY,CAAE,WAAW,OAAO,CAAA;AACrD,MAAA,MAAM,MAAA,GAAS,UAAU,QAAA,GAAM,QAAA;AAC/B,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,MAAA,GAAS,EAAA,GAAK,CAAA,EAAG,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,GAAA,CAAA,GAAQ,IAAA;AAC/D,MAAA,KAAA,CAAM,IAAA,CAAK,KAAK,MAAM,CAAA,CAAA,EAAI,GAAG,QAAQ,CAAA,EAAA,EAAK,OAAO,CAAA,CAAE,CAAA;AAAA,IACrD;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,gBAAA,IAAoB,OAAA,IAAW,KAAA,EAAO;AACvD,IAAA,MAAM,UAAA,GAAa,KAAA;AACnB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,SAAA,EAAY,UAAA,CAAW,KAAA,CAAM,IAAI,CAAA,CAAE,CAAA;AAC9C,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,WAAA,EAAc,UAAA,CAAW,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AACnD,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,aAAA,EAAgB,UAAA,CAAW,KAAA,CAAM,WAAW,CAAA,CAAE,CAAA;AAAA,EAC3D;AACA,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,mBAAA,IAAuB,YAAA,IAAgB,KAAA,EAAO;AAC/D,IAAA,MAAM,aAAA,GAAgB,KAAA;AAGtB,IAAA,KAAA,MAAW,CAAA,IAAK,aAAA,CAAc,UAAA,CAAW,UAAA,IAAc,EAAC,EAAG;AACzD,MAAA,KAAA,CAAM,IAAA,CAAK,CAAA,eAAA,EAAkB,CAAA,CAAE,MAAA,CAAO,GAAG,CAAA,CAAE,CAAA;AAAA,IAC7C;AAAA,EACF;AACA,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,aAAA,IAAiB,MAAA,IAAU,KAAA,EAAO;AACnD,IAAA,MAAM,aAAA,GAAgB,KAAA;AACtB,IAAA,MAAM,OAAA,GACJ,aAAA,CAAc,IAAA,CAAK,MAAA,GAAS,EAAA,GAAK,CAAA,EAAG,aAAA,CAAc,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,QAAQ,aAAA,CAAc,IAAA;AAC3F,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,OAAO,CAAA,CAAE,CAAA;AAAA,EACnC;AACA,EAAA,IAAI,KAAA,CAAM,IAAA,KAAS,OAAA,IAAW,QAAA,IAAY,KAAA,EAAO;AAC/C,IAAA,MAAM,UAAA,GAAa,KAAA;AACnB,IAAA,KAAA,CAAM,IAAA,CAAK,CAAA,UAAA,EAAa,UAAA,CAAW,MAAM,CAAA,CAAE,CAAA;AAAA,EAC7C;AACA,EAAA,KAAA,CAAM,KAAK,EAAE,CAAA;AACb,EAAA,OAAO,KAAA;AACT;AAEA,SAAS,mBAAmB,QAAA,EAA6B;AACvD,EAAA,IAAI,CAAC,KAAA,CAAM,OAAA,CAAQ,QAAQ,GAAG,OAAO,EAAA;AACrC,EAAA,KAAA,MAAW,KAAK,QAAA,EAAU;AACxB,IAAA,IACE,OAAO,CAAA,KAAM,QAAA,IACb,CAAA,KAAM,IAAA,IACN,MAAA,IAAU,CAAA,IACV,CAAA,CAAE,IAAA,KAAS,UAAA,IACX,MAAA,IAAU,CAAA,EACV;AACA,MAAA,OAAO,MAAA,CAAO,EAAE,IAAI,CAAA;AAAA,IACtB;AAAA,EACF;AACA,EAAA,OAAO,EAAA;AACT;AAEA,SAAS,gBAAgB,EAAA,EAAoB;AAC3C,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,EAAE,CAAA;AACxB,EAAA,OAAO,IAAA,CACJ,aAAY,CACZ,OAAA,CAAQ,KAAK,GAAG,CAAA,CAChB,OAAA,CAAQ,WAAA,EAAa,EAAE,CAAA;AAC5B;AAEA,SAAS,WAAW,EAAA,EAAoB;AACtC,EAAA,MAAM,IAAA,GAAO,IAAI,IAAA,CAAK,EAAE,CAAA;AACxB,EAAA,OAAO,IAAA,CAAK,WAAA,EAAY,CAAE,KAAA,CAAM,IAAI,EAAE,CAAA;AACxC;;;AC1OA,IAAM,YAAA,GAAe,GAAA;AACrB,IAAM,cAAA,GAAiB,CAAA;AAEvB,SAAS,gBAAA,CAAiB,KAAa,UAAA,EAA4B;AACjE,EAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,EAAK,EAAE,CAAA;AAC/B,EAAA,IAAI,MAAA,CAAO,KAAA,CAAM,MAAM,CAAA,EAAG;AACxB,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,UAAU,CAAA,GAAA,EAAM,GAAG,CAAA,uBAAA,CAAyB,CAAA;AAAA,EACnF;AACA,EAAA,IAAI,SAAS,CAAA,EAAG;AACd,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,UAAU,CAAA,GAAA,EAAM,GAAG,CAAA,sBAAA,CAAwB,CAAA;AAAA,EAClF;AACA,EAAA,OAAO,MAAA;AACT;AAEO,IAAM,UAAA,GAAa,IAAIG,OAAAA,EAAQ,CACnC,OAAA,CAAQ,KAAK,CAAA,CACb,WAAA,CAAY,iDAAiD,CAAA,CAC7D,MAAA,CAAO,eAAA,EAAiB,gCAAgC,EACxD,MAAA,CAAO,eAAA,EAAiB,gCAAgC,CAAA,CACxD,MAAA,CAAO,6BAAA,EAA+B,yBAAyB,CAAA,CAC/D,MAAA,CAAO,eAAA,EAAiB,2CAA2C,CAAA,CACnE,MAAA,CAAO,eAAA,EAAiB,sBAAsB,CAAA,CAC9C,MAAA,CAAO,UAAA,EAAY,gCAAgC,CAAA,CACnD,MAAA,CAAO,SAAA,EAAW,4BAA4B,CAAA,CAC9C,MAAA,CAAO,eAAA,EAAiB,6BAA6B,CAAA,CACrD,MAAA,CAAO,uBAAA,EAAyB,0BAA0B,CAAA,CAC1D,MAAA,CAAO,QAAA,EAAU,gBAAgB,CAAA,CACjC,MAAA,CAAO,UAAA,EAAY,0BAA0B,CAAA,CAC7C,MAAA,CAAO,WAAA,EAAa,yBAAyB,CAAA,CAC7C,MAAA;AAAA,EACC,YAAA;AAAA,EACA,yCAAyC,YAAY,CAAA,gBAAA,CAAA;AAAA,EACrD,CAAC,GAAA,KAAQ,gBAAA,CAAiB,GAAA,EAAK,QAAQ;AACzC,CAAA,CACC,MAAA;AAAA,EAAO,cAAA;AAAA,EAAgB,sCAAsC,cAAc,CAAA,CAAA,CAAA;AAAA,EAAK,CAAC,GAAA,KAChF,gBAAA,CAAiB,GAAA,EAAK,UAAU;AAClC,CAAA,CACC,MAAA;AAAA,EAAO,eAAA;AAAA,EAAiB,uCAAA;AAAA,EAAyC,CAAC,GAAA,KACjE,gBAAA,CAAiB,GAAA,EAAK,WAAW;AACnC,CAAA,CACC,MAAA,CAAO,YAAA,EAAc,qCAAqC,CAAA,CAC1D,MAAA,CAAO,aAAa,sBAAsB,CAAA,CAC1C,MAAA,CAAO,OAAO,OAAA,KAA+B;AAC5C,EAAA,IAAI;AACF,IAAA,MAAM,cAAc,OAAA,CAAQ,GAAA,CAAI,yBAAyB,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,SAAA,CAAA;AACzE,IAAA,MAAM,OAAA,GAAU,qBAAqB,WAAW,CAAA;AAChD,IAAA,MAAM,OAAA,GAAU,qBAAqB,OAAO,CAAA;AAC5C,IAAA,MAAM,aAAA,GAAgB,mBAAmB,OAAO,CAAA;AAChD,IAAA,MAAM,gBAAA,GAAmB,sBAAsB,OAAO,CAAA;AACtD,IAAA,MAAM,SAAS,MAAM,WAAA,CAAY,OAAA,EAAS,OAAA,EAAS,eAAe,WAAW,CAAA;AAC7E,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,OAAA,CAAQ,IAAI,eAAe,CAAA;AAC3B,MAAA;AAAA,IACF;AACA,IAAA,MAAM,SAAA,GAAY,iBAAiB,IAAA,GAC/B,UAAA,CAAW,QAAQ,gBAAgB,CAAA,GACnC,cAAA,CAAe,MAAA,EAAQ,gBAAgB,CAAA;AAC3C,IAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AAAA,EACvB,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,OAAA,EAAU,KAAA,CAAM,OAAO,CAAA,CAAE,CAAA;AAAA,IACzC,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,MAAM,8BAA8B,CAAA;AAAA,IAC9C;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF,CAAC,CAAA;AAEH,SAAS,mBAAmB,OAAA,EAA2C;AACrE,EAAA,MAAM,gBAA+B,EAAC;AACtC,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,aAAA,CAAc,IAAA,GAAO,eAAA,CAAgB,OAAA,CAAQ,IAAI,CAAA;AAAA,EACnD;AACA,EAAA,IAAI,QAAQ,IAAA,EAAM;AAChB,IAAA,aAAA,CAAc,OAAO,OAAA,CAAQ,IAAA;AAAA,EAC/B;AACA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,aAAA,CAAc,MAAA,GAAS,IAAA;AAAA,EACzB;AACA,EAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,IAAA,aAAA,CAAc,KAAA,GAAQ,IAAA;AAAA,EACxB;AACA,EAAA,IAAI,QAAQ,WAAA,EAAa;AACvB,IAAA,aAAA,CAAc,WAAA,GAAc,IAAA;AAAA,EAC9B;AACA,EAAA,IAAI,QAAQ,MAAA,EAAQ;AAClB,IAAA,aAAA,CAAc,gBAAA,GAAmB,qBAAA,CAAsB,OAAA,CAAQ,MAAM,CAAA;AAAA,EACvE;AAEA,EAAA,MAAM,IAAA,GAAO,QAAQ,IAAA,IAAQ,YAAA;AAC7B,EAAA,IAAI,OAAO,CAAA,EAAG;AACZ,IAAA,aAAA,CAAc,IAAA,GAAO,IAAA;AAAA,EACvB;AACA,EAAA,aAAA,CAAc,MAAA,GAAS,QAAQ,MAAA,IAAU,cAAA;AACzC,EAAA,IAAI,OAAA,CAAQ,YAAY,MAAA,EAAW;AACjC,IAAA,aAAA,CAAc,UAAU,OAAA,CAAQ,OAAA;AAAA,EAClC;AACA,EAAA,OAAO,aAAA;AACT;AAEA,SAAS,sBAAsB,OAAA,EAA8C;AAC3E,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAQ,IAAA,IAAQ,KAAA;AAAA,IACtB,MAAA,EAAQ,QAAQ,MAAA,IAAU,KAAA;AAAA,IAC1B,OAAA,EAAS,QAAQ,OAAA,IAAW,KAAA;AAAA,IAC5B,QAAA,EAAU,QAAQ,QAAA,IAAY,KAAA;AAAA,IAC9B,OAAA,EAAS,QAAQ,OAAA,IAAW;AAAA,GAC9B;AACF;AAEA,eAAe,WAAA,CACb,OAAA,EACA,OAAA,EACA,aAAA,EACA,WAAA,EAC2B;AAC3B,EAAA,IAAI,QAAQ,UAAA,EAAY;AACtB,IAAA,MAAM,QAAQ,OAAA,CAAQ,GAAA;AACtB,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAMC,UAAAA,GAAY,MAAM,OAAA,CAAQ,YAAA,EAAa;AAC7C,MAAA,IAAI,CAACA,UAAAA,EAAW;AACd,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAMC,cAAa,MAAM,OAAA,CAAQ,cAAcD,UAAAA,CAAU,EAAA,EAAI,QAAQ,UAAU,CAAA;AAC/E,MAAA,MAAME,UAAS,MAAM,OAAA,CAAQ,UAAUF,UAAAA,CAAU,EAAA,EAAIC,YAAW,KAAK,CAAA;AACrE,MAAA,MAAME,OAAAA,GAAS,YAAA,CAAaD,OAAAA,EAAQ,aAAa,CAAA;AACjD,MAAA,OAAO;AAAA,QACL,GAAA,EAAKF,UAAAA;AAAA,QACL,UAAA,EAAAC,WAAAA;AAAA,QACA,QAAQE,OAAAA,CAAO,MAAA;AAAA,QACf,OAAA,EAAS,aAAA,CAAcA,OAAAA,CAAO,MAAM,CAAA;AAAA,QACpC,WAAA,EAAa,IAAA;AAAA,QACb,WAAA;AAAA,QACA,wBAAwBA,OAAAA,CAAO,qBAAA;AAAA,QAC/B,wBAAwBA,OAAAA,CAAO;AAAA,OACjC;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AACtC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAM,aAAa,MAAM,OAAA,CAAQ,aAAA,CAAc,KAAA,EAAO,QAAQ,UAAU,CAAA;AACxE,IAAA,MAAMD,UAAS,MAAM,OAAA,CAAQ,SAAA,CAAU,KAAA,EAAO,WAAW,KAAK,CAAA;AAC9D,IAAA,MAAMC,OAAAA,GAAS,YAAA,CAAaD,OAAAA,EAAQ,aAAa,CAAA;AACjD,IAAA,OAAO;AAAA,MACL,GAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAQC,OAAAA,CAAO,MAAA;AAAA,MACf,OAAA,EAAS,aAAA,CAAcA,OAAAA,CAAO,MAAM,CAAA;AAAA,MACpC,WAAA;AAAA,MACA,wBAAwBA,OAAAA,CAAO,qBAAA;AAAA,MAC/B,wBAAwBA,OAAAA,CAAO;AAAA,KACjC;AAAA,EACF;AACA,EAAA,IAAI,QAAQ,GAAA,EAAK;AACf,IAAA,MAAM,QAAQ,OAAA,CAAQ,GAAA;AACtB,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAMH,UAAAA,GAAY,MAAM,OAAA,CAAQ,YAAA,EAAa;AAC7C,MAAA,IAAI,CAACA,UAAAA,EAAW;AACd,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,MAAME,UAAS,MAAM,OAAA,CAAQ,UAAUF,UAAAA,CAAU,EAAA,EAAI,QAAQ,GAAG,CAAA;AAChE,MAAA,MAAMG,OAAAA,GAAS,YAAA,CAAaD,OAAAA,EAAQ,aAAa,CAAA;AACjD,MAAA,OAAO;AAAA,QACL,GAAA,EAAKF,UAAAA;AAAA,QACL,QAAQG,OAAAA,CAAO,MAAA;AAAA,QACf,OAAA,EAAS,aAAA,CAAcA,OAAAA,CAAO,MAAM,CAAA;AAAA,QACpC,WAAA,EAAa,IAAA;AAAA,QACb,WAAA;AAAA,QACA,wBAAwBA,OAAAA,CAAO,qBAAA;AAAA,QAC/B,wBAAwBA,OAAAA,CAAO;AAAA,OACjC;AAAA,IACF;AACA,IAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,MAAA,CAAO,KAAK,CAAA;AACtC,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAMD,UAAS,MAAM,OAAA,CAAQ,SAAA,CAAU,KAAA,EAAO,QAAQ,GAAG,CAAA;AACzD,IAAA,MAAMC,OAAAA,GAAS,YAAA,CAAaD,OAAAA,EAAQ,aAAa,CAAA;AACjD,IAAA,OAAO;AAAA,MACL,GAAA;AAAA,MACA,QAAQC,OAAAA,CAAO,MAAA;AAAA,MACf,OAAA,EAAS,aAAA,CAAcA,OAAAA,CAAO,MAAM,CAAA;AAAA,MACpC,WAAA;AAAA,MACA,wBAAwBA,OAAAA,CAAO,qBAAA;AAAA,MAC/B,wBAAwBA,OAAAA,CAAO;AAAA,KACjC;AAAA,EACF;AACA,EAAA,IAAI,QAAQ,GAAA,EAAK;AACf,IAAA,MAAM,GAAA,GAAM,MAAM,OAAA,CAAQ,MAAA,CAAO,QAAQ,GAAG,CAAA;AAC5C,IAAA,IAAI,CAAC,GAAA,EAAK;AACR,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,MAAMD,OAAAA,GAAS,MAAM,OAAA,CAAQ,kBAAA,CAAmB,QAAQ,GAAG,CAAA;AAC3D,IAAA,MAAMC,OAAAA,GAAS,YAAA,CAAaD,OAAAA,EAAQ,aAAa,CAAA;AACjD,IAAA,MAAM,WAAA,GAAc,MAAM,OAAA,CAAQ,cAAA,CAAe,QAAQ,GAAG,CAAA;AAC5D,IAAA,OAAO;AAAA,MACL,GAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAQC,OAAAA,CAAO,MAAA;AAAA,MACf,OAAA,EAAS,aAAA,CAAcA,OAAAA,CAAO,MAAM,CAAA;AAAA,MACpC,WAAA;AAAA,MACA,wBAAwBA,OAAAA,CAAO,qBAAA;AAAA,MAC/B,wBAAwBA,OAAAA,CAAO;AAAA,KACjC;AAAA,EACF;AACA,EAAA,MAAM,SAAA,GAAY,MAAM,OAAA,CAAQ,YAAA,EAAa;AAC7C,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,MAAA,GAAS,MAAM,OAAA,CAAQ,kBAAA,CAAmB,UAAU,EAAE,CAAA;AAC5D,EAAA,MAAM,MAAA,GAAS,YAAA,CAAa,MAAA,EAAQ,aAAa,CAAA;AACjD,EAAA,OAAO;AAAA,IACL,GAAA,EAAK,SAAA;AAAA,IACL,QAAQ,MAAA,CAAO,MAAA;AAAA,IACf,OAAA,EAAS,aAAA,CAAc,MAAA,CAAO,MAAM,CAAA;AAAA,IACpC,WAAA,EAAa,IAAA;AAAA,IACb,WAAA;AAAA,IACA,wBAAwB,MAAA,CAAO,qBAAA;AAAA,IAC/B,wBAAwB,MAAA,CAAO;AAAA,GACjC;AACF;;;ACzOO,SAAS,iBAAA,CACd,QAAA,EACA,GAAA,EACA,aAAA,EACgB;AAChB,EAAA,MAAM,OAAA,GAAW,aAAA,EAAe,OAAA,IAAW,EAAC;AAC5C,EAAA,QAAQ,QAAA;AAAU,IAChB,KAAK,WAAA,EAAa;AAChB,MAAA,MAAM,SAAS,GAAA,CAAI,iBAAA;AACnB,MAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAC3D,MAAA,OAAO;AAAA,QACL,YAAA,EAAc,WAAA;AAAA,QACd,MAAA;AAAA,QACA,OAAA,EAAU,OAAA,CAAQ,OAAA,IAAkC,GAAA,CAAI,kBAAA;AAAA,QACxD,SAAS,OAAA,CAAQ;AAAA,OACnB;AAAA,IACF;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,SAAS,GAAA,CAAI,4BAAA;AACnB,MAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,yCAAyC,CAAA;AACtE,MAAA,OAAO;AAAA,QACL,YAAA,EAAc,QAAA;AAAA,QACd,MAAA;AAAA,QACA,OAAA,EAAU,OAAA,CAAQ,OAAA,IAAkC,GAAA,CAAI,6BAAA;AAAA,QACxD,SAAS,OAAA,CAAQ;AAAA,OACnB;AAAA,IACF;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,MAAM,SAAS,GAAA,CAAI,cAAA;AACnB,MAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,2BAA2B,CAAA;AACxD,MAAA,OAAO;AAAA,QACL,YAAA,EAAc,QAAA;AAAA,QACd,MAAA;AAAA,QACA,OAAA,EAAU,OAAA,CAAQ,OAAA,IAAkC,GAAA,CAAI,eAAA;AAAA,QACxD,YAAA,EAAe,OAAA,CAAQ,YAAA,IAAuC,GAAA,CAAI,mBAAA;AAAA,QAClE,OAAA,EAAU,OAAA,CAAQ,OAAA,IAAkC,GAAA,CAAI,cAAA;AAAA,QACxD,MAAM,OAAA,CAAQ,IAAA;AAAA,QACd,SAAS,OAAA,CAAQ;AAAA,OACnB;AAAA,IACF;AAAA,IACA,KAAK,QAAA,EAAU;AACb,MAAA,OAAO;AAAA,QACL,YAAA,EAAc,QAAA;AAAA,QACd,OAAA,EAAU,OAAA,CAAQ,OAAA,IAAkC,GAAA,CAAI,eAAA;AAAA,QACxD,SAAS,OAAA,CAAQ;AAAA,OACnB;AAAA,IACF;AAAA,IACA,KAAK,cAAA,EAAgB;AACnB,MAAA,MAAM,SAAS,GAAA,CAAI,aAAA;AACnB,MAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,0BAA0B,CAAA;AACvD,MAAA,MAAM,YAAA,GAAgB,OAAA,CAAQ,YAAA,IAAuC,GAAA,CAAI,mBAAA;AACzE,MAAA,MAAM,OAAA,GAAW,OAAA,CAAQ,OAAA,IAAkC,GAAA,CAAI,cAAA;AAC/D,MAAA,IAAI,CAAC,YAAA,IAAgB,CAAC,SAAS,MAAM,IAAI,MAAM,2CAA2C,CAAA;AAC1F,MAAA,OAAO;AAAA,QACL,YAAA,EAAc,cAAA;AAAA,QACd,MAAA;AAAA,QACA,YAAA;AAAA,QACA,UAAA,EAAa,OAAA,CAAQ,UAAA,IAAqC,GAAA,CAAI,iBAAA;AAAA,QAC9D,OAAA;AAAA,QACA,SAAS,OAAA,CAAQ,OAAA;AAAA,QACjB,wBAAwB,OAAA,CAAQ;AAAA,OAClC;AAAA,IACF;AAAA,IACA,KAAK,gBAAA,EAAkB;AACrB,MAAA,MAAM,cAAc,GAAA,CAAI,iBAAA;AACxB,MAAA,MAAM,kBAAkB,GAAA,CAAI,qBAAA;AAC5B,MAAA,MAAM,eAAe,GAAA,CAAI,iBAAA;AACzB,MAAA,IAAI,CAAC,WAAA,EAAa,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAChE,MAAA,IAAI,CAAC,eAAA,EAAiB,MAAM,IAAI,MAAM,kCAAkC,CAAA;AACxE,MAAA,MAAM,MAAA,GAAU,OAAA,CAAQ,MAAA,IAAiC,GAAA,CAAI,UAAA;AAC7D,MAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,uBAAuB,CAAA;AACpD,MAAA,OAAO;AAAA,QACL,YAAA,EAAc,gBAAA;AAAA,QACd,WAAA;AAAA,QACA,eAAA;AAAA,QACA,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF;AAAA,IACA,KAAK,eAAA,EAAiB;AACpB,MAAA,OAAO;AAAA,QACL,YAAA,EAAc,eAAA;AAAA,QACd,OAAA,EAAU,OAAA,CAAQ,OAAA,IAAkC,GAAA,CAAI,qBAAA;AAAA,QACxD,QAAA,EAAW,OAAA,CAAQ,QAAA,IAAmC,GAAA,CAAI,sBAAA;AAAA,QAC1D,OAAA,EAAU,OAAA,CAAQ,OAAA,IAAkC,GAAA,CAAI,sBAAA;AAAA,QACxD,SAAS,OAAA,CAAQ;AAAA,OACnB;AAAA,IACF;AAAA,IACA,KAAK,UAAA,EAAY;AACf,MAAA,MAAM,SAAS,GAAA,CAAI,gBAAA;AACnB,MAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,MAAM,6BAA6B,CAAA;AAC1D,MAAA,OAAO;AAAA,QACL,YAAA,EAAc,UAAA;AAAA,QACd,MAAA;AAAA,QACA,OAAA,EAAU,OAAA,CAAQ,OAAA,IAAkC,GAAA,CAAI,iBAAA;AAAA,QACxD,SAAS,OAAA,CAAQ;AAAA,OACnB;AAAA,IACF;AAAA;AAEJ;AC3FO,SAASC,WAAAA,GAAoB;AAClC,EAAA,OAAOC,UAAA,EAAkB;AAC3B;AAEO,SAASC,WAAAA,GAA2B;AACzC,EAAA,OAAOC,UAAA,EAAkB;AAC3B;AAEO,SAAS,gBAAA,GAA+B;AAC7C,EAAA,MAAM,OAAOD,WAAAA,EAAW;AACxB,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG;AACrB,IAAA,MAAM,IAAI,MAAM,eAAe,CAAA;AAAA,EACjC;AACA,EAAA,OAAO,KAAK,CAAC,CAAA;AACf;AAEO,SAASE,uBAAsB,KAAA,EAA6B;AACjE,EAAA,OAAOC,sBAA6B,KAAK,CAAA;AAC3C;AAEO,SAAS,wBAAwB,KAAA,EAA4B;AAClE,EAAA,MAAM,WAAA,GAAc,KAAA,IAAS,gBAAA,EAAiB,CAAE,KAAA;AAChD,EAAA,MAAM,WAAA,GAAcD,uBAAsB,WAAW,CAAA;AACrD,EAAA,IAAI,WAAA,CAAY,WAAW,CAAA,EAAG;AAC5B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,6BAAA,EAAgC,WAAW,CAAA,CAAE,CAAA;AAAA,EAC/D;AACA,EAAA,OAAO,WAAA,CAAY,WAAA,CAAY,MAAA,GAAS,CAAC,CAAA;AAC3C;AAEO,SAAS,iBACd,KAAA,EACwD;AACxD,EAAA,MAAM,OAAOF,WAAAA,EAAW;AACxB,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAA6D;AACnF,EAAA,KAAA,MAAW,WAAW,IAAA,EAAM;AAC1B,IAAA,MAAM,YAAY,OAAA,CAAQ,SAAA;AAC1B,IAAA,IAAI,CAAC,SAAA,CAAU,GAAA,CAAI,SAAS,CAAA,IAAK,SAAA,CAAU,GAAA,CAAI,SAAS,CAAA,CAAG,QAAA,GAAW,OAAA,CAAQ,SAAA,EAAW;AACvF,MAAA,SAAA,CAAU,IAAI,SAAA,EAAW;AAAA,QACvB,GAAA,EAAK,SAAA;AAAA,QACL,IAAA,EAAM,SAAA;AAAA,QACN,UAAU,OAAA,CAAQ;AAAA,OACnB,CAAA;AAAA,IACH;AAAA,EACF;AACA,EAAA,OAAO,MAAM,IAAA,CAAK,SAAA,CAAU,MAAA,EAAQ,EACjC,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,EAAE,QAAA,GAAW,CAAA,CAAE,QAAQ,CAAA,CACtC,KAAA,CAAM,GAAG,KAAK,CAAA;AACnB;AAEO,SAAS,iBAAA,CAAkB,OAAe,YAAA,EAAkC;AACjF,EAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,KAAA,EAAO,YAAY,CAAA;AAC5D,EAAA,IAAI,CAACI,UAAAA,CAAW,cAAc,CAAA,EAAG;AAC/B,IAAA,MAAM,IAAI,KAAA,CAAM,CAAA,WAAA,EAAc,YAAY,CAAA,kBAAA,EAAqB,KAAK,CAAA,CAAE,CAAA;AAAA,EACxE;AACA,EAAA,MAAM,UAAA,GAAa,YAAA,CAAa,cAAA,EAAgB,OAAO,CAAA;AACvD,EAAA,OAAO,gBAAA,CAAiB,KAAA,CAAM,IAAA,CAAK,KAAA,CAAM,UAAU,CAAC,CAAA;AACtD;AAEO,SAAS,0BACd,KAAA,EACiF;AACjF,EAAA,OAAOF,sBAAAA,CAAsB,KAAK,CAAA,CAC/B,GAAA,CAAI,CAAC,EAAA,MAAQ;AAAA,IACZ,IAAI,EAAA,CAAG,EAAA;AAAA,IACP,OAAO,EAAA,CAAG,KAAA;AAAA,IACV,YAAY,EAAA,CAAG,UAAA;AAAA,IACf,kBAAA,EAAoB,GAAG,kBAAA,IAAsB;AAAA,GAC/C,CAAE,EACD,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,CAAA,CAAE,UAAA,GAAa,CAAA,CAAE,UAAU,CAAA;AAC/C;AAMO,SAAS,yBAAA,CAA0B,OAAe,aAAA,EAAoC;AAC3F,EAAA,MAAM,MAAA,GAASG,iBAAiB,KAAK,CAAA;AACrC,EAAA,MAAM,YAAwB,EAAC;AAC/B,EAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AAC1B,IAAA,MAAM,MAAA,GAASC,gBAAA,CAAwB,KAAA,EAAO,KAAA,EAAO,aAAa,CAAA;AAClE,IAAA,SAAA,CAAU,IAAA,CAAK,GAAG,MAAM,CAAA;AAAA,EAC1B;AACA,EAAA,OAAO,SAAA,CAAU,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,SAAA,GAAY,EAAE,SAAS,CAAA;AAC3D;;;ACzFA,IAAM,eAAA,GAAgC,WAAA;AACtC,IAAM,YAAA,GAAe,mBAAA;AAwBrB,eAAsB,kBAAkB,KAAA,EAAoD;AAC1F,EAAA,MAAM,cAAA,GAAiB,MAAM,iBAAA,CAAkB,KAAA,CAAM,UAAU,CAAA;AAC/D,EAAA,IAAI,UAAA;AACJ,EAAA,IAAI,MAAM,UAAA,EAAY;AACpB,IAAA,IAAI,CAAC,MAAM,WAAA,EAAa;AACtB,MAAA,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAAA,IACzD;AACA,IAAA,UAAA,GAAa,iBAAA,CAAkB,KAAA,CAAM,WAAA,EAAa,KAAA,CAAM,UAAU,CAAA;AAAA,EACpE,CAAA,MAAA,IAAW,MAAM,WAAA,EAAa;AAC5B,IAAA,UAAA,GAAa,uBAAA,CAAwB,MAAM,WAAW,CAAA;AAAA,EACxD,CAAA,MAAA,IAAW,MAAM,QAAA,EAAU;AACzB,IAAA,UAAA,GAAa,uBAAA,EAAwB;AAAA,EACvC;AACA,EAAA,IAAA,CAAK,MAAM,QAAA,IAAY,KAAA,CAAM,eAAe,KAAA,CAAM,UAAA,KAAe,CAAC,UAAA,EAAY;AAC5E,IAAA,MAAM,IAAI,MAAM,qBAAqB,CAAA;AAAA,EACvC;AAEA,EAAA,IAAI,cAAc,KAAA,CAAM,SAAA,IAAa,WAAW,MAAA,CAAO,GAAA,KAAQ,MAAM,SAAA,EAAW;AAC9E,IAAA,MAAM,IAAI,KAAA;AAAA,MACR,yBAAyB,UAAA,CAAW,MAAA,CAAO,GAAG,CAAA,iCAAA,EAAoC,MAAM,SAAS,CAAA;AAAA,KACnG;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GACJ,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,OAAA,CAAQ,MAAA,GAAS,CAAA,GACpC,KAAA,CAAM,OAAA,GACL,cAAA,CAAe,OAAA,IAAW,CAAC,QAAQ,YAAY,CAAA;AACtD,EAAA,MAAM,GAAA,GAAM,OAAO,OAAO,CAAA;AAC1B,EAAA,MAAM,QAAA,GAAY,KAAA,CAAM,QAAA,IACtB,cAAA,CAAe,UAAU,YAAA,IACzB,eAAA;AACF,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,KAAA,IAAS,cAAA,CAAe,KAAA,IAAS,YAAA;AACrD,EAAA,MAAM,cAAA,GAAiB,iBAAA,CAAkB,QAAA,EAAU,GAAA,EAAK,eAAe,QAAQ,CAAA;AAE/E,EAAA,MAAM,UAAU,MAAA,CAAO,WAAA;AAAA,IACrB,MAAA,CAAO,OAAA,CAAQ,cAAA,CAAe,OAAA,IAAW,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAC,IAAA,EAAM,MAAM,CAAA,KAAM;AACnE,MAAA,OAAO;AAAA,QACL,IAAA;AAAA,QACA;AAAA,UACE,IAAA;AAAA,UACA,OAAA,EAAS,OAAO,OAAA,IAAW,OAAA;AAAA,UAC3B,aAAa,MAAA,CAAO,WAAA;AAAA,UACpB,aAAa,MAAA,CAAO,WAAA;AAAA,UACpB,QAAQ,MAAA,CAAO,MAAA;AAAA,UACf,WAAW,MAAA,CAAO,SAAA;AAAA,UAClB,MAAM,MAAA,CAAO;AAAA;AACf,OACF;AAAA,IACF,CAAC;AAAA,GACH;AAEA,EAAA,OAAO;AAAA,IACL,cAAA;AAAA,IACA,UAAA;AAAA,IACA,GAAA;AAAA,IACA,cAAA;AAAA,IACA,KAAA;AAAA,IACA;AAAA,GACF;AACF;;;AClFO,SAAS,8BAAA,CACd,OACA,UAAA,EAGA;AACA,EAAA,MAAM,cAAc,UAAA,CAAW,QAAA,CAAS,UAAA,CAAW,QAAA,CAAS,SAAS,CAAC,CAAA;AACtE,EAAA,IAAI,WAAA,CAAY,SAAS,eAAA,EAAiB;AACxC,IAAA,MAAM,IAAI,MAAM,sCAAsC,CAAA;AAAA,EACxD;AAEA,EAAA,MAAM,OAAA,GAAU,YAAY,QAAA,CAAS,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,SAAS,cAAc,CAAA;AAC1E,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,IAAA,KAAS,cAAA,EAAgB;AAC/C,IAAA,MAAM,IAAI,MAAM,8CAA8C,CAAA;AAAA,EAChE;AACA,EAAA,MAAM,aAAa,OAAA,CAAQ,UAAA;AAC3B,EAAA,MAAM,WAAW,OAAA,CAAQ,QAAA;AACzB,EAAA,MAAM,eAAA,GAAkB,WAAW,gBAAA,EAAkB,IAAA,CAAK,CAAC,EAAA,KAAO,EAAA,CAAG,OAAO,UAAU,CAAA;AACtF,EAAA,MAAM,SAAA,GAAY,iBAAiB,SAAA,IAAa,EAAA;AAChD,EAAA,OAAO;AAAA,IACL,yBAAA,EAA2B;AAAA,MACzB,UAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAA,EAAM;AAAA;AACR,GACF;AACF;AACO,SAAS,mCACd,KAAA,EACiE;AACjE,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAC/B,IAAA,IACE,OAAO,MAAA,KAAW,QAAA,IAClB,MAAA,KAAW,IAAA,IACX,YAAA,IAAgB,MAAA,IAChB,UAAA,IAAc,MAAA,IACd,WAAA,IAAe,MAAA,IACf,MAAA,IAAU,MAAA,EACV;AACA,MAAA,OAAO;AAAA,QACL,yBAAA,EAA2B;AAAA,OAC7B;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,CAAA,MAAQ;AACN,IAAA,OAAO,IAAA;AAAA,EACT;AACF;;;ACjCA,IAAM,oBAAA,GAAuB,CAAC,KAAA,KAAmC,OAAA,CAAQ,IAAI,IAAA,CAAK,SAAA,CAAU,KAAK,CAAC,CAAA;AAE3F,IAAM,UAAA,GAAa,IAAIb,OAAAA,EAAQ,CACnC,OAAA,CAAQ,KAAK,CAAA,CACb,WAAA,CAAY,+BAA+B,CAAA,CAC3C,QAAA,CAAS,aAAA,EAAe,mBAAmB,CAAA,CAC3C,QAAA,CAAS,SAAA,EAAW,cAAc,CAAA,CAClC,MAAA,CAAO,uBAAA,EAAyB,mCAAmC,CAAA,CACnE,MAAA,CAAO,uBAAA,EAAyB,iBAAiB,CAAA,CACjD,MAAA,CAAO,iBAAA,EAAmB,cAAc,CAAA,CACxC,MAAA;AAAA,EACC,6BAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA;AAAA,EACC,wBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,4BAAA,EAA8B,oDAAoD,CAAA,CACzF,MAAA;AAAA,EACC,qBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,kBAAA,EAAoB,gCAAgC,CAAA,CAC3D,MAAA;AAAA,EACC,mBAAA;AAAA,EACA,gGAAA;AAAA,EACA,CAAC,KAAA,EAAe,QAAA,KAAuB,QAAA,CAAS,OAAO,KAAK,CAAA;AAAA,EAC5D;AACF,CAAA,CACC,MAAA,CAAO,WAAA,EAAa,wBAAwB,CAAA,CAC5C,MAAA,CAAO,YAAA,EAAc,6CAA6C,CAAA,CAClE,MAAA,CAAO,wBAAA,EAA0B,2CAA2C,CAAA,CAC5E,MAAA;AAAA,EACC,8BAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,oCAAA,EAAsC,uCAAuC,CAAA,CACpF,MAAA;AAAA,EACC,kBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,OAAO,SAAA,EAAW,KAAA,EAAO,OAAA,KAAY;AAC3C,EAAA,MAAM,QAAQc,sBAAAA,CAAuB,qBAAA,EAAuB,EAAE,SAAA,EAAW,KAAA,EAAO,SAAS,CAAA;AAGzF,EAAA,IAAI,aAAA,GAAgB,oBAAA;AACpB,EAAA,IAAI,MAAM,OAAA,CAAQ,MAAA,IAAU,MAAM,OAAA,CAAQ,MAAA,CAAO,SAAS,CAAA,EAAG;AAC3D,IAAA,IAAI;AACF,MAAA,MAAM,cAAA,GAAiB,mBAAA,CAAoB,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA;AAC/D,MAAA,MAAM,YAAA,GAAe,IAAI,GAAA,CAAI,cAAc,CAAA;AAC3C,MAAA,aAAA,GAAgB,2BAAA,CAA4B,sBAAsB,YAAY,CAAA;AAAA,IAChF,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,QAAA,OAAA,CAAQ,KAAA,CAAM,MAAM,OAAO,CAAA;AAAA,MAC7B,CAAA,MAAO;AACL,QAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,MACrB;AACA,MAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,IAChB;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,EAAE,gBAAgB,UAAA,EAAY,GAAA,EAAK,gBAAgB,KAAA,EAAO,OAAA,EAAQ,GACtE,MAAM,iBAAA,CAAkB;AAAA,MACtB,UAAA,EAAY,MAAM,OAAA,CAAQ,MAAA;AAAA,MAC1B,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,MACxB,KAAA,EAAO,MAAM,OAAA,CAAQ,KAAA;AAAA,MACrB,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAA,MACvB,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,MACxB,WAAA,EAAa,MAAM,OAAA,CAAQ,WAAA;AAAA,MAC3B,UAAA,EAAY,MAAM,OAAA,CAAQ,UAAA;AAAA,MAC1B,WAAW,KAAA,CAAM;AAAA,KAClB,CAAA;AAGH,IAAA,MAAM,eAAe,YAAA,EAAa;AAClC,IAAA,MAAM,QAAA,GAAW,YAAA,GAAgB,YAAA,CAAa,YAAY,KAAK,KAAA,CAAA,GAAa,KAAA,CAAA;AAG5E,IAAA,MAAM,QAAQ,UAAA,EAAY,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,SAAS,QAAA,EAAS;AACnE,IAAA,MAAM,QAAQ,QAAA,EAAS;AAEvB,IAAA,MAAMC,GAAA;AAAA,MACJ;AAAA,QACE,OAAA,EAAS;AAAA,UACP,KAAA;AAAA,UACA,KAAA;AAAA,UACA,WAAW,KAAA,CAAM,SAAA;AAAA,UACjB,KAAA,EAAO,MAAM,OAAA,CAAQ,yBAAA,GAChB,mCAAmC,KAAA,CAAM,KAAK,CAAA,KAC9C,UAAA,GACG,8BAAA,CAA+B,KAAA,CAAM,OAAO,UAAU,CAAA,GACtD,EAAE,IAAA,EAAM,KAAA,CAAM,OAAM,CAAA,GACxB,EAAE,IAAA,EAAM,KAAA,CAAM,KAAA,EAAM;AAAA,UACxB,OAAA;AAAA,UACA,KAAA;AAAA,UACA,cAAA;AAAA,UACA,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,eAAA,IAAmB,cAAA,CAAe,eAAA;AAAA,UACjE,QAAA,EAAU,KAAA,CAAM,OAAA,CAAQ,QAAA,IAAY,cAAA,CAAe,QAAA;AAAA,UACnD,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,UAAA,IAAc,cAAA,CAAe,UAAA;AAAA,UACvD,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,OAAA,IAAW,cAAA,CAAe,OAAA;AAAA,UACjD,oBAAoB,cAAA,CAAe,kBAAA;AAAA,UACnC,gBAAgB,GAAA,CAAI,gBAAA;AAAA,UACpB,0BAA0B,cAAA,CAAe,wBAAA;AAAA,UACzC,GAAA;AAAA,UACA,QAAA,EAAU,QAAQ,GAAA,CAAI,kBAAA;AAAA,UACtB,OAAA,EAAS,MAAM,OAAA,CAAQ;AAAA,SACzB;AAAA,QACA;AAAA,OACF;AAAA,MACA;AAAA,QACE,aAAA;AAAA,QACA,eAAA,EAAiB,sBAAA;AAAA,QACjB,UAAA,EAAY,iBAAA;AAAA,QACZ,kBAAA,EAAoBC,yBAAAA;AAAA,QACpB,QAAA;AAAA,QACA,WAAA,EAAAC,WAAAA;AAAA,QACA,SAAA,EAAW,gBAAA;AAAA,QACX;AAAA;AACF,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,OAAA,CAAQ,KAAA,CAAM,MAAM,OAAO,CAAA;AAAA,IAC7B,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,IACrB;AACA,IAAA,OAAA,CAAQ,KAAK,CAAC,CAAA;AAAA,EAChB;AACF,CAAC,CAAA;;;ACvJH,IAAM,kBAAA,GAAkC,CAAC,OAAA,EAAS,KAAA,KAAU;AAC1D,EAAA,OAAA,CAAQ,KAAA,CAAM,SAAS,KAAK,CAAA;AAC9B,CAAA;AAKO,IAAM,UAAA,GAAN,MAAM,WAAA,CAAW;AAAA,EACtB,OAAwB,kBAAA,GAAqB,GAAA;AAAA,EACrC,gBAAiC,EAAC;AAAA,EAClC,OAAA,GAAmD,IAAA;AAAA,EAC1C,OAAA;AAAA,EACA,WAAA;AAAA,EACjB,YAAY,OAAA,EAA6B;AACvC,IAAA,IAAA,CAAK,UAAU,OAAA,EAAS,OAAA;AACxB,IAAA,IAAA,CAAK,WAAA,GAAc,SAAS,WAAA,IAAe,kBAAA;AAAA,EAC7C;AAAA,EACA,WAAW,EAAA,EAA0C;AACnD,IAAA,IAAA,CAAK,OAAA,GAAU,EAAA;AACf,IAAA,KAAA,MAAW,KAAA,IAAS,KAAK,aAAA,EAAe;AACtC,MAAA,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,IACvB;AACA,IAAA,IAAA,CAAK,cAAc,MAAA,GAAS,CAAA;AAAA,EAC9B;AAAA,EACA,KAAK,KAAA,EAA4B;AAC/B,IAAA,IAAI,KAAK,OAAA,EAAS;AAChB,MAAA,IAAA,CAAK,WAAW,KAAK,CAAA;AAAA,IACvB,CAAA,MAAO;AACL,MAAA,IAAI,IAAA,CAAK,aAAA,CAAc,MAAA,IAAU,WAAA,CAAW,kBAAA,EAAoB;AAC9D,QAAA,IAAA,CAAK,cAAc,KAAA,EAAM;AAAA,MAC3B;AACA,MAAA,IAAA,CAAK,aAAA,CAAc,KAAK,KAAK,CAAA;AAAA,IAC/B;AAAA,EACF;AAAA,EACQ,WAAW,KAAA,EAA4B;AAC7C,IAAA,IAAI;AACF,MAAA,IAAA,CAAK,UAAU,KAAK,CAAA;AAAA,IACtB,SAAS,KAAA,EAAO;AACd,MAAA,IAAI,KAAK,OAAA,EAAS;AAChB,QAAA,IAAA,CAAK,QAAQ,KAAK,CAAA;AAAA,MACpB,CAAA,MAAO;AACL,QAAA,IAAA,CAAK,WAAA,CAAY,6BAA6B,KAAK,CAAA;AAAA,MACrD;AAAA,IACF;AAAA,EACF;AACF,CAAA;AC7BA,IAAM,gBAAA,GAAmB,cAA4C,IAAI,CAAA;AAClE,IAAM,oBAAoB,gBAAA,CAAiB,QAAA;AAC3C,IAAM,sBAAsB,MAA6B;AAC9D,EAAA,MAAM,OAAA,GAAU,WAAW,gBAAgB,CAAA;AAC3C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,MAAM,2DAA2D,CAAA;AAAA,EAC7E;AACA,EAAA,OAAO,OAAA;AACT,CAAA;;;AC3BO,IAAM,YAAA,GAAe,CAAC,IAAA,EAAc,SAAA,KAA8B;AACvE,EAAA,IAAI,IAAA,CAAK,MAAA,IAAU,SAAA,EAAW,OAAO,IAAA;AACrC,EAAA,OAAO,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,SAAS,CAAC,CAAA,GAAA,CAAA;AACpC,CAAA;AACO,IAAM,WAAA,GAAc,CAAC,CAAA,KAAoB;AAC9C,EAAA,MAAM,IAAI,KAAA,CAAM,CAAA,kBAAA,EAAqB,CAAC,CAAA,CAAE,CAAA;AAC1C,CAAA;AACO,IAAMC,mBAAkB,CAAC,SAAA,KAA8B,IAAI,IAAA,CAAK,SAAS,EAAE,cAAA,EAAe;AAC1F,IAAM,WAAA,GAAc,CAAC,QAAA,EAAkB,SAAA,GAAY,EAAA,KAAe;AACvE,EAAA,IAAI,QAAA,CAAS,MAAA,IAAU,SAAA,EAAW,OAAO,QAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA;AAChC,EAAA,IAAI,KAAA,CAAM,MAAA,IAAU,CAAA,EAAG,OAAO,QAAA;AAC9B,EAAA,MAAM,QAAA,GAAW,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,IAAK,EAAA;AAC5C,EAAA,MAAM,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,IAAK,EAAA;AAC7C,EAAA,MAAM,SAAA,GAAY,CAAA,IAAA,EAAO,SAAS,CAAA,CAAA,EAAI,QAAQ,CAAA,CAAA;AAC9C,EAAA,IAAI,SAAA,CAAU,MAAA,IAAU,SAAA,EAAW,OAAO,SAAA;AAC1C,EAAA,OAAO,OAAO,QAAQ,CAAA,CAAA;AACxB,CAAA;AACO,IAAM,eAAA,GAAkB,CAC7B,KAAA,EACA,QAAA,KAC6C;AAC7C,EAAA,MAAM,WAAW,KAAA,CAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,MAAM,CAAA;AAC7C,EAAA,MAAM,OAAA,GAAU,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AAC1C,EAAA,MAAM,SAAA,GAAY,QAAA,CAAS,MAAA,GAAS,OAAA,CAAQ,MAAA;AAC5C,EAAA,OAAO,EAAE,SAAS,SAAA,EAAU;AAC9B,CAAA;;;ACxBO,IAAM,YAAA,GAAe;AAAA,EAC1B,sBAAA,EAAwB,EAAA;AAAA,EAIxB,oBAAA,EAAsB,EAAA;AAAA,EACtB,qBAAA,EAAuB,GAEzB,CAAA;AAEO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,qBAAA,EAAuB,CAAA;AAAA,EAEvB,oBAAA,EAAsB,CAAA;AAAA,EAEtB,kBAAA,EAAoB;AACtB,CAAA;AAEO,IAAM,SAAA,GAAY;AAAA,EAEvB,MAAA,EAAQ,QAAA;AAAA,EACR,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU;AACZ,CAAA;AAEO,IAAM,gBAAA,GAAmB;AAAA,EAC9B,0BAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA;AAEO,IAAM,YAAA,GAAe;AAAA,EAC1B,WAAA,EAAa,QAAA;AAAA,EACb,aAAA,EAAe,QAAA;AAAA,EACf,MAAA,EAAQ,OAAA;AAAA,EACR,IAAA,EAAM,GAAA;AAAA,EACN,MAAA,EAAQ,KAAA;AAAA,EACR,UAAA,EAAY,GAAA;AAAA,EACZ,OAAA,EAAS,GAAA;AAAA,EACT,GAAA,EAAK,GAAA;AAAA,EACL,WAAA,EAAa,GAAA;AAAA,EACb,MAAA,EAAQ,GAAA;AAAA,EACR,MAAA,EAAQ,OAGV,CAAA;AAEO,IAAM,SAAA,GAAY;AAAA,EACvB,UAAU,CAAA,EAAG,YAAA,CAAa,WAAW,CAAA,EAAG,aAAa,aAAa,CAAA,SAAA,CAAA;AAAA,EAClE,MAAA,EAAQ,CAAA,EAAG,YAAA,CAAa,MAAM,CAAA,OAAA,CAAA;AAAA,EAC9B,MAAA,EAAQ,CAAA,EAAG,YAAA,CAAa,MAAM,CAAA,OAAA,CAAA;AAAA,EAC9B,IAAA,EAAM,CAAA,EAAG,YAAA,CAAa,IAAI,CAAA,KAAA,CAAA;AAAA,EAC1B,MAAA,EAAQ,CAAA,EAAG,YAAA,CAAa,MAAM,CAAA,OAAA,CAAA;AAAA,EAC9B,KAAA,EAAO,CAAA,EAAG,YAAA,CAAa,UAAU,CAAA,MAAA,CAAA;AAAA,EACjC,OAAA,EAAS,CAAA,EAAG,YAAA,CAAa,OAAO,CAAA,QAAA,CAAA;AAAA,EAChC,GAAA,EAAK,CAAA,EAAG,YAAA,CAAa,GAAG,CAAA,QAAA,CAAA;AAAA,EACxB,WAAA,EAAa,CAAA,EAAG,YAAA,CAAa,WAAW,CAAA,YAAA,CAAA;AAAA,EACxC,MAAA,EAAQ,CAAA,EAAG,YAAA,CAAa,MAAM,CAAA,OAAA,CAKhC,CAAA;AC9DO,IAAM,YAAA,GAAe,CAAI,KAAA,KAAkC;AAChE,EAAA,MAAM,GAAA,GAAM,OAAO,KAAK,CAAA;AACxB,EAAA,kBAAA,CAAmB,MAAM;AACvB,IAAA,GAAA,CAAI,OAAA,GAAU,KAAA;AAAA,EAChB,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT,CAAA;ACIO,IAAM,iBAAA,GAAoB,CAC/B,OAAA,KAC4B;AAC5B,EAAA,MAAM,EAAE,KAAA,EAAO,QAAA,EAAU,MAAA,EAAO,GAAI,OAAA;AACpC,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,CAAC,CAAA;AACpD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,aAAA,IAAiB,KAAA,CAAM,MAAA,IAAU,KAAA,CAAM,SAAS,CAAA,EAAG;AACrD,MAAA,gBAAA,CAAiB,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,IACnC;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,CAAM,MAAA,EAAQ,aAAa,CAAC,CAAA;AAChC,EAAA,MAAM,gBAAA,GAAmB,WAAA;AAAA,IACvB,CAAC,WAAmB,GAAA,KAAsB;AACxC,MAAA,IAAI,GAAA,CAAI,OAAA,IAAW,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AACnC,QAAA,gBAAA,CAAiB,CAAC,IAAA,KAAS,IAAA,CAAK,IAAI,CAAA,EAAG,IAAA,GAAO,CAAC,CAAC,CAAA;AAChD,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,IAAI,GAAA,CAAI,SAAA,IAAa,KAAA,CAAM,MAAA,GAAS,CAAA,EAAG;AACrC,QAAA,gBAAA,CAAiB,CAAC,SAAS,IAAA,CAAK,GAAA,CAAI,MAAM,MAAA,GAAS,CAAA,EAAG,IAAA,GAAO,CAAC,CAAC,CAAA;AAC/D,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,IAAI,GAAA,CAAI,MAAA,IAAU,KAAA,CAAM,aAAa,CAAA,EAAG;AACtC,QAAA,QAAA,GAAW,KAAA,CAAM,aAAa,CAAC,CAAA;AAC/B,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,IAAA,CAAK,GAAA,CAAI,MAAA,IAAU,SAAA,KAAc,GAAA,KAAQ,MAAA,EAAQ;AAC/C,QAAA,MAAA,EAAO;AACP,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,KAAA,EAAO,aAAA,EAAe,QAAA,EAAU,MAAM;AAAA,GACzC;AACA,EAAA,OAAO,EAAE,eAAe,gBAAA,EAAiB;AAC3C,CAAA;ACrCO,IAAM,YAAA,GAAe,CAAC,OAAA,KAAiC;AAC5D,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIC,SAAS,EAAE,CAAA;AACrC,EAAA,MAAM,QAAA,GAAW,aAAa,KAAK,CAAA;AACnC,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA;AACjD,EAAA,MAAM,WAAA,GAAc,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA;AACjD,EAAA,MAAM,WAAA,GAAcC,WAAAA;AAAA,IAClB,CAAC,WAAmB,GAAA,KAAmB;AACrC,MAAA,IAAI,IAAI,MAAA,EAAQ;AACd,QAAA,QAAA,CAAS,EAAE,CAAA;AACX,QAAA,WAAA,CAAY,OAAA,IAAU;AACtB,QAAA;AAAA,MACF;AACA,MAAA,IAAI,GAAA,CAAI,MAAA,IAAU,QAAA,CAAS,OAAA,CAAQ,MAAK,EAAG;AACzC,QAAA,WAAA,CAAY,OAAA,CAAQ,QAAA,CAAS,OAAA,CAAQ,IAAA,EAAM,CAAA;AAC3C,QAAA,QAAA,CAAS,EAAE,CAAA;AACX,QAAA;AAAA,MACF;AACA,MAAA,IAAI,GAAA,CAAI,SAAA,IAAa,GAAA,CAAI,MAAA,EAAQ;AAC/B,QAAA,QAAA,CAAS,CAAC,IAAA,KAAS,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA;AACpC,QAAA;AAAA,MACF;AACA,MAAA,IAAI,CAAC,GAAA,CAAI,IAAA,IAAQ,CAAC,GAAA,CAAI,QAAQ,SAAA,EAAW;AACvC,QAAA,QAAA,CAAS,CAAC,IAAA,KAAS,IAAA,GAAO,SAAS,CAAA;AAAA,MACrC;AAAA,IACF,CAAA;AAAA,IACA,CAAC,QAAA,EAAU,WAAA,EAAa,WAAW;AAAA,GACrC;AACA,EAAA,MAAM,KAAA,GAAQA,YAAY,MAAM;AAC9B,IAAA,QAAA,CAAS,EAAE,CAAA;AAAA,EACb,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,EAAM;AACrC,CAAA;ACtBO,IAAM,cAAc,CAAK;AAAA,EAC9B,KAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA,GAAe,gBAAA;AAAA,EACf,eAAA;AAAA,EACA,MAAA;AAAA,EACA,WAAW,YAAA,CAAa;AAC1B,CAAA,KAA2B;AACzB,EAAA,MAAM,EAAE,aAAA,EAAe,gBAAA,EAAiB,GAAI,iBAAA,CAAkB;AAAA,IAC5D,KAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAA,QAAA,CAAS,CAAC,WAAW,GAAA,KAAQ;AAC3B,IAAA,IAAI,kBAAkB,SAAA,EAAW,GAAA,EAAK,KAAA,CAAM,aAAa,CAAC,CAAA,EAAG;AAC7D,IAAA,gBAAA,CAAiB,WAAW,GAAG,CAAA;AAAA,EACjC,CAAC,CAAA;AACD,EAAA,MAAM,EAAE,YAAA,EAAc,YAAA,EAAa,GAAI,QAAQ,MAAM;AACnD,IAAA,MAAM,MAAA,GAAS,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,aAAA,GAAgB,QAAA,GAAW,CAAA,EAAG,KAAA,CAAM,MAAA,GAAS,QAAQ,CAAC,CAAA;AAC1F,IAAA,OAAO;AAAA,MACL,YAAA,EAAc,MAAA;AAAA,MACd,YAAA,EAAc,KAAA,CAAM,KAAA,CAAM,MAAA,EAAQ,SAAS,QAAQ;AAAA,KACrD;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,aAAA,EAAe,QAAQ,CAAC,CAAA;AACnC,EAAA,MAAM,eAAe,YAAA,GAAe,CAAA;AACpC,EAAA,MAAM,YAAA,GAAe,YAAA,GAAe,QAAA,GAAW,KAAA,CAAM,MAAA;AACrD,EAAA,uBACE,IAAA,CAAC,GAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EACjB,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,GAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,MAAA,EAAQ,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MACzB,MAAM,MAAA,GAAS,QAAA,oBACd,IAAA,CAAC,IAAA,EAAA,EAAK,OAAM,MAAA,EACT,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QAAI,GAAA;AAAA,QACH,aAAA,GAAgB,CAAA;AAAA,QAAE,GAAA;AAAA,QAAE,KAAA,CAAM,MAAA;AAAA,QAAO;AAAA,OAAA,EACrC;AAAA,KAAA,EAEJ,CAAA;AAAA,IACC,gCAAgB,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,MAAA,EAAQ,oBAAU,QAAA,EAAS,CAAA;AAAA,wBACvD,GAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAChB,QAAA,EAAA,YAAA,CAAa,WAAW,CAAA,mBACvB,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,QAAQ,QAAA,EAAA,YAAA,EAAa,CAAA,GAEjC,aAAa,GAAA,CAAI,CAAC,MAAM,KAAA,KAAU;AAChC,MAAA,MAAM,cAAc,YAAA,GAAe,KAAA;AACnC,MAAA,OAAO,UAAA,CAAW,IAAA,EAAM,WAAA,KAAgB,aAAA,EAAe,WAAW,CAAA;AAAA,IACpE,CAAC,CAAA,EAEL,CAAA;AAAA,IACC,gCAAgB,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAM,MAAA,EAAQ,oBAAU,QAAA,EAAS;AAAA,GAAA,EAC1D,CAAA;AAEJ,CAAA;ACzDO,IAAM,2BAA2B,CAAC;AAAA,EACvC,GAAA;AAAA,EACA,WAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA,GAAiB;AACnB,CAAA,qBACEC,GAAAA;AAAA,EAAC,WAAA;AAAA,EAAA;AAAA,IACC,OAAO,CAAA,gBAAA,EAAmB,GAAA,CAAI,SAAS,CAAA,CAAA,EAAI,SAAA,CAAU,QAAQ,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,CAAA,CAAA,EAAI,cAAA,GAAiB,UAAU,MAAA,GAAS,EAAE,IAAI,SAAA,CAAU,IAAI,GAAG,IAAA,EAAK;AAAA,IACrJ,KAAA,EAAO,WAAA;AAAA,IACP,QAAA,EAAU,kBAAA;AAAA,IACV,MAAA;AAAA,IACA,YAAA,EAAa,sBAAA;AAAA,IACb,eAAA,EAAiB,CAAC,IAAA,EAAM,IAAA,EAAM,QAAA,KAAa;AACzC,MAAA,IAAI,IAAA,KAAS,OAAO,QAAA,EAAU;AAC5B,QAAA,kBAAA,CAAmB,QAAQ,CAAA;AAC3B,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,UAAA,EAAY,CAAC,EAAA,EAAI,UAAA,qBACfC,IAAAA,CAACC,IAAAA,EAAA,EAAiB,KAAA,EAAO,UAAA,GAAa,MAAA,GAAS,MAAA,EAC5C,QAAA,EAAA;AAAA,MAAA,UAAA,GAAa,GAAA,GAAM,GAAA;AAAA,MAAI,QAAA;AAAA,MAAO,EAAA,CAAG,UAAA;AAAA,MAAW,IAAA;AAAA,MAAG,EAAA,CAAG,EAAA;AAAA,MAAG;AAAA,KAAA,EAAA,EAD7C,GAAG,EAEd;AAAA;AAEJ,CAAA;AC9BK,IAAM,wBAAA,GAA2B,CAAC,EAAE,KAAA,EAAO,QAAO,KAAqC;AAC5F,EAAAC,QAAAA,CAAS,CAAC,KAAA,EAAO,GAAA,KAAQ;AACvB,IAAA,IAAI,KAAA,KAAU,GAAA,IAAO,GAAA,CAAI,MAAA,EAAQ;AAC/B,MAAA,MAAA,EAAO;AAAA,IACT;AAAA,EACF,CAAC,CAAA;AACD,EAAA,uBACEF,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,UAAU,CAAA,EACpC,QAAA,EAAA;AAAA,oBAAAH,IAAAA,CAACG,GAAAA,EAAA,EAAI,YAAA,EAAc,CAAA,EACjB,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAACE,IAAAA,EAAA,EAAK,IAAA,EAAI,MAAC,QAAA,EAAA,cAAA,EAAY,CAAA;AAAA,sBACvBD,IAAAA,CAACC,IAAAA,EAAA,EAAK,UAAQ,IAAA,EAAC,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QAAE,SAAA,CAAU;AAAA,OAAA,EAAK;AAAA,KAAA,EAClC,CAAA;AAAA,oBACAD,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,YAAY,CAAA,EACtC,QAAA,EAAA;AAAA,sBAAAH,IAAAA,CAACC,MAAA,EACC,QAAA,EAAA;AAAA,wBAAAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBACzBF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,MAAA,EAAQ,gBAAM,IAAA,EAAK;AAAA,OAAA,EACjC,CAAA;AAAA,sBACAD,IAAAA,CAACC,IAAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,QAAA,EAAM,CAAA;AAAA,wBACzBF,GAAAA,CAACE,IAAAA,EAAA,EAAM,gBAAM,UAAA,EAAW;AAAA,OAAA,EAC1B,CAAA;AAAA,sBACAD,IAAAA,CAACC,IAAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,wBAC9BF,IAACE,IAAAA,EAAA,EAAM,UAAAL,gBAAAA,CAAgB,KAAA,CAAM,SAAS,CAAA,EAAE;AAAA,OAAA,EAC1C,CAAA;AAAA,sBACAI,IAAAA,CAACC,IAAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,MAAA,EAAI,CAAA;AAAA,wBACvBF,GAAAA,CAACE,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAE,gBAAM,EAAA,EAAG;AAAA,OAAA,EAC3B,CAAA;AAAA,sBACAD,IAAAA,CAACC,IAAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,wBAC3BF,GAAAA,CAACE,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAE,gBAAM,KAAA,EAAM;AAAA,OAAA,EAC9B;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;ACjCO,IAAM,sBAAsB,CAAC;AAAA,EAClC,UAAA;AAAA,EACA,MAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,qBACEF,GAAAA;AAAA,EAAC,WAAA;AAAA,EAAA;AAAA,IACC,KAAA,EAAO,CAAA,gBAAA,EAAmB,UAAA,CAAW,UAAU,CAAA,CAAA,EAAI,SAAA,CAAU,QAAQ,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,CAAA,CAAA,EAAI,SAAA,CAAU,IAAI,CAAA,CAAA;AAAA,IAC3G,KAAA,EAAO,MAAA;AAAA,IACP,QAAA,EAAU,aAAA;AAAA,IACV,MAAA;AAAA,IACA,YAAA,EAAa,iBAAA;AAAA,IACb,UAAA,EAAY,CAAC,EAAA,EAAI,UAAA,qBACfC,IAAAA,CAACC,IAAAA,EAAA,EAAiB,KAAA,EAAO,UAAA,GAAa,MAAA,GAAS,MAAA,EAC5C,QAAA,EAAA;AAAA,MAAA,UAAA,GAAa,GAAA,GAAM,GAAA;AAAA,MAAI,IAAA;AAAA,MAAG,EAAA,CAAG,IAAA;AAAA,MAAK,SAAA;AAAA,MAAQ,EAAA,CAAG,UAAA;AAAA,MAAW,IAAA;AAAA,MAAGL,gBAAAA,CAAgB,GAAG,SAAS,CAAA;AAAA,MAAE;AAAA,KAAA,EAAA,EADjF,GAAG,EAEd;AAAA;AAEJ,CAAA;ACrBK,IAAM,cAAA,GAAiB,CAAC,OAAA,KAAmC;AAChE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIC,QAAAA,CAAsB;AAAA,IAC1D,MAAA,EAAQ,cAAA;AAAA,IACR,cAAA,EAAgB,QAAQ,aAAA,CAAc,cAAA;AAAA,IACtC,YAAY,OAAA,CAAQ,iBAAA;AAAA,IACpB,KAAA,EAAO,QAAQ,aAAA,CAAc,KAAA;AAAA,IAC7B,QAAA,EAAU,QAAQ,aAAA,CAAc,QAAA;AAAA,IAChC,UAAA,EAAY,QAAQ,aAAA,CAAc,UAAA;AAAA,IAClC,OAAA,EAAS,QAAQ,aAAA,CAAc,OAAA;AAAA,IAC/B,cAAc,EAAC;AAAA,IACf,kBAAA,EAAoB,QAAQ,aAAA,CAAc;AAAA,GAC3C,CAAA;AACD,EAAA,MAAM,WAAA,GAAcC,WAAAA,CAAY,CAAC,KAAA,KAAyB;AACxD,IAAA,IAAI,KAAA,CAAM,SAAS,mBAAA,EAAqB;AACtC,MAAA,cAAA,CAAe,CAAC,IAAA,MAAU;AAAA,QACxB,gBAAgB,KAAA,CAAM,cAAA;AAAA,QACtB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,UAAU,KAAA,CAAM,QAAA;AAAA,QAChB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,SAAS,KAAA,CAAM,OAAA;AAAA,QACf,WAAA,EAAa,CAAA;AAAA,QACb,MAAA,EAAQ,SAAA;AAAA,QACR,OAAO,KAAA,CAAM,KAAA;AAAA,QACb,eAAA,EAAiB,KAAK,GAAA,EAAI;AAAA,QAC1B,cAAc,EAAC;AAAA,QACf,oBAAoB,IAAA,CAAK;AAAA,OAC3B,CAAE,CAAA;AACF,MAAA,OAAO,EAAE,aAAa,IAAA,EAAK;AAAA,IAC7B;AACA,IAAA,IAAI,KAAA,CAAM,SAAS,gBAAA,EAAkB;AACnC,MAAA,cAAA,CAAe,CAAC,IAAA,MAAU;AAAA,QACxB,GAAG,IAAA;AAAA,QACH,cAAc,CAAC,GAAG,IAAA,CAAK,YAAA,EAAc,MAAM,SAAS;AAAA,OACtD,CAAE,CAAA;AACF,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,KAAA,CAAM,SAAS,mBAAA,EAAqB;AACtC,MAAA,cAAA,CAAe,CAAC,IAAA,MAAU;AAAA,QACxB,GAAG,IAAA;AAAA,QACH,YAAA,EAAc,KAAK,YAAA,CAAa,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,KAAM,MAAM,SAAS;AAAA,OACrE,CAAE,CAAA;AACF,MAAA,OAAO,IAAA;AAAA,IACT;AACA,IAAA,IAAI,gBAAgB,KAAA,EAAO;AACzB,MAAA,MAAM,UAAA,GAAa,MAAM,IAAA,KAAS,aAAA;AAClC,MAAA,MAAM,SAAA,GAAY,gBAAA,CAAiB,QAAA,CAAS,KAAA,CAAM,IAAyC,CAAA;AAC3F,MAAA,MAAM,UAAA,GACJ,oBAAoB,KAAA,GAChB,KAAA,CAAM,iBACN,YAAA,IAAgB,KAAA,GACd,MAAM,UAAA,GACN,MAAA;AACR,MAAA,cAAA,CAAe,CAAC,IAAA,MAAU;AAAA,QACxB,GAAG,IAAA;AAAA,QACH,aAAa,KAAA,CAAM,UAAA;AAAA,QACnB,MAAA,EAAQ,UAAA,GAAa,WAAA,GAAc,SAAA,GAAY,SAAA,GAAY,SAAA;AAAA,QAC3D,GAAI,cAAc,SAAA,GAAY,EAAE,iBAAiB,IAAA,CAAK,GAAA,EAAI,EAAE,GAAI,EAAC;AAAA,QACjE,GAAI,YAAY,kBAAA,KAAuB,MAAA,GACnC,EAAE,kBAAA,EAAoB,UAAA,CAAW,kBAAA,EAAmB,GACpD;AAAC,OACP,CAAE,CAAA;AACF,MAAA,IAAI,UAAA,EAAY,OAAO,EAAE,SAAA,EAAW,IAAA,EAAK;AACzC,MAAA,IAAI,SAAA,EAAW,OAAO,EAAE,OAAA,EAAS,IAAA,EAAK;AAAA,IACxC;AACA,IAAA,OAAO,IAAA;AAAA,EACT,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,MAAM,aAAA,GAAgBA,WAAAA,CAAY,CAAC,UAAA,KAAuB;AACxD,IAAA,cAAA,CAAe,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,YAAW,CAAE,CAAA;AAAA,EACpD,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,MAAM,QAAA,GAAWA,WAAAA,CAAY,CAAC,KAAA,KAAkB;AAC9C,IAAA,cAAA,CAAe,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,OAAM,CAAE,CAAA;AAAA,EAC/C,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,MAAM,cAAA,GAAiBA,WAAAA,CAAY,CAAC,IAAA,KAAiB;AACnD,IAAA,cAAA,CAAe,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,WAAA,EAAa,MAAK,CAAE,CAAA;AAAA,EAC3D,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,MAAM,qBAAA,GAAwBA,WAAAA,CAAY,CAAC,kBAAA,KAA+B;AACxE,IAAA,cAAA,CAAe,CAAC,IAAA,MAAU,EAAE,GAAG,IAAA,EAAM,oBAAmB,CAAE,CAAA;AAAA,EAC5D,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO;AAAA,IACL,WAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;ACrFO,IAAM,iBAAA,GAAoB,CAAC,OAAA,KAAsC;AACtE,EAAA,MAAM,EAAE,OAAA,EAAS,cAAA,EAAgB,eAAA,EAAgB,GAAI,OAAA;AACrD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAID,SAAS,KAAK,CAAA;AAChD,EAAA,MAAM,EAAE,aAAA,EAAe,gBAAA,EAAiB,GAAI,iBAAA,CAAkB;AAAA,IAC5D,KAAA,EAAO,OAAA;AAAA,IACP,QAAA,EAAU,CAAC,MAAA,KAAW,cAAA,CAAe,OAAO,GAAG;AAAA,GAChD,CAAA;AACD,EAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,KAAA,KAAU,YAAA,CAAa;AAAA,IACjD,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,MAAA,cAAA,CAAe,KAAK,CAAA;AACpB,MAAA,YAAA,CAAa,KAAK,CAAA;AAAA,IACpB,CAAA;AAAA,IACA,QAAA,EAAU,MAAM,YAAA,CAAa,KAAK;AAAA,GACnC,CAAA;AACD,EAAA,MAAM,cAAA,GAAiBC,WAAAA;AAAA,IACrB,CAAC,WAAmB,GAAA,KAAa;AAC/B,MAAA,IAAI,SAAA,EAAW;AACb,QAAA,WAAA,CAAY,WAAW,GAAG,CAAA;AAC1B,QAAA;AAAA,MACF;AACA,MAAA,IAAI,gBAAA,CAAiB,SAAA,EAAW,GAAG,CAAA,EAAG;AACtC,MAAA,IAAI,eAAA,GAAkB,SAAA,EAAW,GAAG,CAAA,EAAG;AACvC,MAAA,IAAI,cAAc,GAAA,EAAK;AACrB,QAAA,KAAA,EAAM;AACN,QAAA,YAAA,CAAa,IAAI,CAAA;AAAA,MACnB;AAAA,IACF,CAAA;AAAA,IACA,CAAC,SAAA,EAAW,WAAA,EAAa,gBAAA,EAAkB,iBAAiB,KAAK;AAAA,GACnE;AACA,EAAA,OAAO;AAAA,IACL,SAAA;AAAA,IACA,KAAA;AAAA,IACA,aAAA;AAAA,IACA;AAAA,GACF;AACF,CAAA;ACnCO,IAAM,aAAa,CAAC;AAAA,EACzB,OAAA;AAAA,EACA,aAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,MAAA,GAAS,KAAA;AAAA,EACT;AACF,CAAA,KAAuB;AACrB,EAAA,MAAM,iBAAiB,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA,GAAI,OAAA;AAC/D,EAAA,IAAI,cAAA,CAAe,WAAW,CAAA,EAAG;AAC/B,IAAA,uBAAOC,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,mBAAA,EAAiB,CAAA;AAAA,EAC7C;AACA,EAAA,MAAM,KAAA,GAAQ,cAAA,CAAe,GAAA,CAAI,CAAC,QAAQ,KAAA,qBACxCD,IAAAA,CAACC,IAAAA,EAAA,EAAsB,KAAA,EAAO,KAAA,KAAU,aAAA,GAAgB,SAAS,MAAA,EAC9D,QAAA,EAAA;AAAA,IAAA,KAAA,KAAU,gBAAgB,GAAA,GAAM,GAAA;AAAA,IAAI,GAAA;AAAA,IAAE,UAAA,GAAa,MAAA,CAAO,GAAA,GAAM,MAAA,CAAO,IAAA;AAAA,IACvE,UAAA,IAAc,MAAA,CAAO,MAAA,oBACpBD,KAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,sBACDA,KAACC,IAAAA,EAAA,EAAK,OAAO,MAAA,CAAO,MAAA,KAAW,YAAA,GAAe,OAAA,GAAU,QAAA,EAAU,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QAC9D,MAAA,CAAO,MAAA,KAAW,YAAA,GAAe,QAAA,GAAW,QAAA;AAAA,QAAS;AAAA,OAAA,EACzD;AAAA,KAAA,EACF,CAAA;AAAA,IAED,SAAS,GAAA,GAAM;AAAA,GAAA,EAAA,EAVP,MAAA,CAAO,GAWlB,CACD,CAAA;AACD,EAAA,OAAO,MAAA,mBAASF,GAAAA,CAACI,GAAAA,EAAA,EAAK,QAAA,EAAA,KAAA,EAAM,CAAA,mBAASJ,GAAAA,CAACI,GAAAA,EAAA,EAAI,aAAA,EAAc,UAAU,QAAA,EAAA,KAAA,EAAM,CAAA;AAC1E,CAAA;ACpBO,IAAM,qBAAqB,CAAC;AAAA,EACjC,OAAA;AAAA,EACA,IAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA,GAAa,KAAA;AAAA,EACb,MAAA,GAAS,KAAA;AAAA,EACT,WAAW,YAAA,CAAa,sBAAA;AAAA,EACxB;AACF,CAAA,KAA+B;AAC7B,EAAA,MAAM,EAAE,SAAA,EAAW,KAAA,EAAO,aAAA,EAAe,cAAA,KAAmB,iBAAA,CAAkB;AAAA,IAC5E,OAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACD,CAAA;AACD,EAAAD,SAAS,cAAc,CAAA;AACvB,EAAA,uBACEF,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAe,MAAA,GAAS,QAAQ,QAAA,EAClC,QAAA,EAAA;AAAA,IAAA,CAAC,6BACAH,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EACjB,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAACI,GAAAA,EAAA,EACC,QAAA,kBAAAJ,GAAAA,CAACE,MAAA,EAAK,KAAA,EAAM,MAAA,EAAQ,QAAA,EAAA,IAAA,EAAK,CAAA,EAC3B,CAAA;AAAA,sBACAF,GAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UACC,OAAA;AAAA,UACA,aAAA;AAAA,UACA,UAAA;AAAA,UACA,MAAA;AAAA,UACA;AAAA;AAAA;AACF,KAAA,EACF,CAAA;AAAA,IAED,SAAA,oBACCC,IAAAA,CAACG,GAAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,sBAC3BF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,SAAS,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBAC3BF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EACtB;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAA;AC9CO,IAAM,uBAAuB,CAAC;AAAA,EACnC,OAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,KAAiC;AAC/B,EAAA,MAAM,eAAA,GAAkBH,WAAAA;AAAA,IACtB,CAAC,SAAA,KAAsB;AACrB,MAAA,IAAI,cAAc,GAAA,EAAK;AACrB,QAAA,iBAAA,EAAkB;AAClB,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,CAAC,iBAAiB;AAAA,GACpB;AACA,EAAA,MAAM,IAAA,GAAO,CAAA,QAAA,EAAW,SAAA,CAAU,QAAQ,IAAI,SAAA,CAAU,MAAM,CAAA,CAAA,EAAI,SAAA,CAAU,KAAK,CAAA,CAAA,EAAI,SAAA,CAAU,OAAO,CAAA,CAAA,EAAI,UAAU,MAAM,CAAA,CAAA;AAC1H,EAAA,uBACEC,GAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,IAAA;AAAA,MACA,cAAA;AAAA,MACA,UAAA,EAAU,IAAA;AAAA,MACV,UAAU,YAAA,CAAa,sBAAA;AAAA,MACvB;AAAA;AAAA,GACF;AAEJ,CAAA;ACxBO,IAAM,uBAAuB,CAAC;AAAA,EACnC,IAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA;AACF,CAAA,qBACEA,GAAAA;AAAA,EAAC,WAAA;AAAA,EAAA;AAAA,IACC,KAAA,EAAO,CAAA,YAAA,EAAe,SAAA,CAAU,QAAQ,CAAA,CAAA,EAAI,SAAA,CAAU,MAAM,CAAA,CAAA,EAAI,SAAA,CAAU,WAAW,CAAA,CAAA,EAAI,SAAA,CAAU,GAAG,CAAA,CAAA;AAAA,IACtG,KAAA,EAAO,IAAA;AAAA,IACP,QAAA,EAAU,WAAA;AAAA,IACV,YAAA,EAAa,4CAAA;AAAA,IACb,eAAA,EAAiB,CAAC,IAAA,EAAM,IAAA,EAAM,QAAA,KAAa;AACzC,MAAA,IAAI,IAAA,KAAS,OAAO,QAAA,EAAU;AAC5B,QAAA,WAAA,CAAY,QAAQ,CAAA;AACpB,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,IAAI,SAAS,GAAA,EAAK;AAChB,QAAA,iBAAA,EAAkB;AAClB,QAAA,OAAO,IAAA;AAAA,MACT;AACA,MAAA,OAAO,KAAA;AAAA,IACT,CAAA;AAAA,IACA,UAAA,EAAY,CAAC,GAAA,EAAK,UAAA,qBAChBC,IAAAA,CAACC,IAAAA,EAAA,EAAqB,KAAA,EAAO,UAAA,GAAa,MAAA,GAAS,MAAA,EAChD,QAAA,EAAA;AAAA,MAAA,UAAA,GAAa,GAAA,GAAM,GAAA;AAAA,MAAI,GAAA;AAAA,MAAE,GAAA,CAAI,SAAA;AAAA,MAAU,KAAA;AAAA,MAAI,GAAA,CAAI,UAAA;AAAA,MAAW,UAAA;AAAA,MAAS,GAAA,CAAI,KAAA;AAAA,MAAM,KAAA;AAAA,MAC7EL,gBAAAA,CAAgB,IAAI,SAAS,CAAA;AAAA,MAAE;AAAA,KAAA,EAAA,EAFvB,IAAI,KAGf;AAAA;AAEJ,CAAA;ACvBK,IAAM,gBAAgB,CAAC,EAAE,UAAA,EAAY,cAAA,GAAiB,MAAK,KAA0B;AAC1F,EAAA,MAAM,MAAM,mBAAA,EAAoB;AAChC,EAAA,MAAM,iBAAA,GAAoBE,WAAAA;AAAA,IACxB,CAAC,KAAA,KAA4B;AAC3B,MAAA,IAAI,UAAA,CAAW,SAAS,gBAAA,EAAkB;AACxC,QAAA,GAAA,CAAI,aAAA,CAAc,YAAY,KAAK,CAAA;AAAA,MACrC;AAAA,IACF,CAAA;AAAA,IACA,CAAC,GAAA,CAAI,aAAA,EAAe,UAAU;AAAA,GAChC;AACA,EAAA,QAAQ,WAAW,IAAA;AAAM,IACvB,KAAK,iBAAA;AACH,MAAA,uBACEC,GAAAA;AAAA,QAAC,oBAAA;AAAA,QAAA;AAAA,UACC,MAAM,UAAA,CAAW,IAAA;AAAA,UACjB,aAAa,GAAA,CAAI,WAAA;AAAA,UACjB,aAAa,GAAA,CAAI,WAAA;AAAA,UACjB,mBAAmB,GAAA,CAAI;AAAA;AAAA,OACzB;AAAA,IAEJ,KAAK,iBAAA;AACH,MAAA,uBACEA,GAAAA;AAAA,QAAC,oBAAA;AAAA,QAAA;AAAA,UACC,SAAS,UAAA,CAAW,OAAA;AAAA,UACpB,gBAAgB,GAAA,CAAI,cAAA;AAAA,UACpB,mBAAmB,GAAA,CAAI;AAAA;AAAA,OACzB;AAAA,IAEJ,KAAK,qBAAA;AACH,MAAA,uBACEA,GAAAA;AAAA,QAAC,wBAAA;AAAA,QAAA;AAAA,UACC,KAAK,UAAA,CAAW,GAAA;AAAA,UAChB,aAAa,UAAA,CAAW,WAAA;AAAA,UACxB,oBAAoB,GAAA,CAAI,kBAAA;AAAA,UACxB,oBAAoB,GAAA,CAAI,kBAAA;AAAA,UACxB,QAAQ,GAAA,CAAI,MAAA;AAAA,UACZ;AAAA;AAAA,OACF;AAAA,IAEJ,KAAK,gBAAA;AACH,MAAA,uBACEA,GAAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACC,YAAY,UAAA,CAAW,UAAA;AAAA,UACvB,QAAQ,UAAA,CAAW,MAAA;AAAA,UACnB,aAAA,EAAe,iBAAA;AAAA,UACf,QAAQ,GAAA,CAAI;AAAA;AAAA,OACd;AAAA,IAEJ,KAAK,qBAAA;AACH,MAAA,uBAAOA,IAAC,wBAAA,EAAA,EAAyB,KAAA,EAAO,WAAW,aAAA,EAAe,MAAA,EAAQ,IAAI,MAAA,EAAQ,CAAA;AAAA,IACxF;AACE,MAAA,OAAO,YAAY,UAAU,CAAA;AAAA;AAEnC,CAAA;AC5DO,IAAM,kBAAkB,CAAC;AAAA,EAC9B,cAAA;AAAA,EACA,IAAA;AAAA,EACA,YAAA,GAAe;AACjB,CAAA,qBACEA,GAAAA,CAACI,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EACjB,QAAA,kBAAAH,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,KAAA,EACjB,QAAA,EAAA;AAAA,kBAAAJ,GAAAA,CAACI,GAAAA,EAAA,EAAI,YAAA,EAAc,CAAA,EACjB,QAAA,kBAAAJ,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAO,cAAA,EAAiB,QAAA,EAAA,SAAA,CAAU,QAAO,CAAA,EACjD,CAAA;AAAA,kBACAF,IAACE,IAAAA,EAAA,EAAK,OAAM,OAAA,EAAQ,QAAA,EAAU,cAC3B,QAAA,EAAA,IAAA,EACH;AAAA,CAAA,EACF,CAAA,EACF,CAAA;AASK,IAAM,SAAA,GAAY,CAAC,EAAE,cAAA,EAAgB,KAAA,EAAO,OAAA,EAAS,QAAA,EAAS,qBACnED,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EACjB,QAAA,EAAA;AAAA,kBAAAH,KAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,KAAA,EAAM,KAAK,CAAA,EAC5B,QAAA,EAAA;AAAA,oBAAAJ,IAACE,IAAAA,EAAA,EAAK,KAAA,EAAO,cAAA,EAAiB,oBAAU,MAAA,EAAO,CAAA;AAAA,oBAC/CF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,SAAS,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,IAC1B,OAAA,oBACCF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,OAAA,EAAQ,QAAA,EAAQ,IAAA,EACzB,QAAA,EAAA,OAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAAA,kBACAD,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,KAAA,EACjB,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAACI,GAAAA,EAAA,EAAI,YAAA,EAAc,CAAA,EACjB,QAAA,kBAAAJ,GAAAA,CAACE,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAE,QAAA,EAAA,SAAA,CAAU,MAAK,CAAA,EACjC,CAAA;AAAA,IACC;AAAA,GAAA,EACH;AAAA,CAAA,EACF,CAAA;ACvCK,IAAM,mBAAA,GAAsB,CAAC,EAAE,MAAA,EAAO,KAAiD;AAE5F,EAAA,IAAI,MAAA,CAAO,SAAS,eAAA,EAAiB;AACnC,IAAA,OAAO,oBAAoB,MAAM,CAAA;AAAA,EACnC;AAEA,EAAA,MAAM,aAAA,GAAgB,aAAa,MAAM,CAAA;AACzC,EAAA,IAAI,CAAC,eAAe,OAAO,IAAA;AAE3B,EAAA,uBACED,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EAChB,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,SAAA,IAAa,eAAA,CAAgB,MAAA,CAAO,SAAS,CAAA;AAAA,IACpD;AAAA,GAAA,EACH,CAAA;AAEJ,CAAA;AAEA,SAAS,oBAAoB,KAAA,EAAiD;AAC5E,EAAA,uBACEH,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EAChB,QAAA,EAAA;AAAA,IAAA,KAAA,CAAM,SAAA,IAAa,eAAA,CAAgB,KAAA,CAAM,SAAS,CAAA;AAAA,IAClD,KAAA,CAAM,UAAA,CAAW,GAAA,CAAI,CAAC,UAAU,KAAA,KAAU;AACzC,MAAA,MAAM,aAAA,GAAgB,aAAa,QAAQ,CAAA;AAC3C,MAAA,IAAI,CAAC,eAAe,OAAO,IAAA;AAC3B,MAAA,uBACEJ,GAAAA,CAACI,GAAAA,EAAA,EAAqD,eAAc,QAAA,EACjE,QAAA,EAAA,aAAA,EAAA,EADO,QAAA,CAAS,EAAA,IAAM,CAAA,EAAG,QAAA,CAAS,IAAI,CAAA,CAAA,EAAI,KAAK,CAAA,CAElD,CAAA;AAAA,IAEJ,CAAC;AAAA,GAAA,EACH,CAAA;AAEJ;AAEA,SAAS,gBAAgB,IAAA,EAA+B;AACtD,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,EAAA,uBACEJ,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAe,SAAQ,KAAA,EAAM,WAAA,EACtC,QAAA,kBAAAA,GAAAA,CAACI,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAChB,gBAAM,GAAA,CAAI,CAAC,IAAA,EAAM,GAAA,qBAChBJ,GAAAA,CAACE,IAAAA,EAAA,EAA8B,UAAQ,IAAA,EAAC,IAAA,EAAK,MAAA,EAC1C,QAAA,EAAA,IAAA,EAAA,EADQ,CAAA,UAAA,EAAa,GAAG,CAAA,CAE3B,CACD,GACH,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,aAAa,MAAA,EAAmC;AACvD,EAAA,MAAM,KAAA,GACJ,OAAO,IAAA,KAAS,OAAA,IAAY,WAAW,MAAA,IAAU,MAAA,CAAO,QAAS,KAAA,GAAQ,OAAA;AAE3E,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,OAAA;AACH,MAAA,OAAO,WAAA,CAAY,MAAA,CAAO,IAAA,EAAM,MAAA,CAAO,KAAK,CAAA;AAAA,IAE9C,KAAK,OAAA;AACH,MAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAe,QAAA,EAAS,OAAM,OAAA,EACvC,QAAA,kBAAAA,GAAAA,CAACE,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAE,iBAAO,OAAA,IAAW,MAAA,CAAO,OAAM,CAAA,EACjD,CAAA;AAAA,IAGJ,KAAK,UAAA;AACH,MAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAe,OAAA,EAAQ,KAAA,EAAM,aAAA,EACtC,QAAA,kBAAAA,GAAAA,CAACE,IAAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,MAAK,CAAA,EACrB,CAAA;AAAA,IAGJ,KAAK,mBAAA,EAAqB;AAExB,MAAA,IAAI,OAAO,KAAA,EAAO;AAChB,QAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAe,OAAM,KAAA,EAAM,mBAAA,EACpC,QAAA,kBAAAA,GAAAA,CAACE,MAAA,EAAK,KAAA,EAAM,KAAA,EAAO,QAAA,EAAA,MAAA,CAAO,OAAM,CAAA,EAClC,CAAA;AAAA,MAEJ;AACA,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,cAAA,EAAgB,MAAA,CAAO,CAAC,MAAM,CAAC,CAAA,CAAE,SAAS,CAAA,IAAK,EAAC;AACzE,MAAA,IAAI,SAAA,CAAU,SAAS,CAAA,EAAG;AACxB,QAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAe,QAAA,EAAS,KAAA,EAAM,oBAAA,EACvC,QAAA,kBAAAC,IAAAA,CAACC,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EACX,QAAA,EAAA;AAAA,UAAA,SAAA,CAAU,MAAA;AAAA,UAAO,iBAAA;AAAA,UAAgB,SAAA,CAAU,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM;AAAA,SAAA,EACjE,CAAA,EACF,CAAA;AAAA,MAEJ;AACA,MAAA,uBAAOF,GAAAA,CAAC,eAAA,EAAA,EAAgB,cAAA,EAAe,OAAA,EAAQ,MAAK,qBAAA,EAAsB,CAAA;AAAA,IAC5E;AAAA,IAEA,KAAK,MAAA;AACH,MAAA,OAAO,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,IAEjC,KAAK,WAAA;AACH,MAAA,uBAAOA,GAAAA,CAAC,eAAA,EAAA,EAAgB,cAAA,EAAgB,KAAA,EAAO,MAAK,cAAA,EAAe,CAAA;AAAA,IAErE,KAAK,cAAA;AACH,MAAA,OAAO,kBAAA,CAAmB,QAAQ,KAAK,CAAA;AAAA,IAEzC,KAAK,eAAA;AACH,MAAA,OAAO,mBAAA,CAAoB,QAAQ,KAAK,CAAA;AAAA,IAE1C,KAAK,cAAA;AACH,MAAA,OAAO,kBAAA,CAAmB,QAAQ,KAAK,CAAA;AAAA,IAEzC,KAAK,gBAAA;AACH,MAAA,OAAO,oBAAA,CAAqB,QAAQ,KAAK,CAAA;AAAA,IAE3C,KAAK,YAAA;AACH,MAAA,uBACEA,GAAAA,CAAC,SAAA,EAAA,EAAU,gBAAgB,KAAA,EAAO,KAAA,EAAM,UAAS,OAAA,EAAS,WAAA,CAAY,OAAO,IAAI,CAAA,EAC/E,0BAAAA,GAAAA,CAACE,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,qBAAO,CAAA,EACxB,CAAA;AAAA,IAGJ,KAAK,iBAAA;AACH,MAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAgB,KAAA,EAAO,OAAM,YAAA,EAAa,OAAA,EAAS,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA,EACnF,QAAA,kBAAAC,KAACC,IAAAA,EAAA,EAAK,UAAQ,IAAA,EAAC,QAAA,EAAA;AAAA,QAAA,SAAA;AAAA,QAAQ,MAAA,CAAO,YAAY,cAAA,GAAiB;AAAA,OAAA,EAAG,CAAA,EAChE,CAAA;AAAA,IAGJ,KAAK,UAAA;AACH,MAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAgB,KAAA,EAAO,OAAM,MAAA,EAAO,OAAA,EAAS,WAAA,CAAY,MAAA,CAAO,MAAM,CAAA,EAC/E,QAAA,kBAAAC,KAACC,IAAAA,EAAA,EAAK,UAAQ,IAAA,EAAC,QAAA,EAAA;AAAA,QAAA,SAAA;AAAA,QAAG,WAAA,CAAY,MAAA,CAAO,WAAA,EAAa,EAAE;AAAA,OAAA,EAAE,CAAA,EACxD,CAAA;AAAA,IAGJ,KAAK,iBAAA;AACH,MAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,gBAAgB,KAAA,EAAO,KAAA,EAAM,SAAQ,OAAA,EAAS,WAAA,CAAY,OAAO,IAAI,CAAA,EAC9E,0BAAAA,GAAAA,CAACE,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,qBAAO,CAAA,EACxB,CAAA;AAAA,IAGJ,KAAK,eAAA;AACH,MAAA,OAAO,mBAAA,CAAoB,QAAQ,KAAK,CAAA;AAAA,IAE1C,KAAK,aAAA;AACH,MAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,gBAAgB,KAAA,EAAO,KAAA,EAAM,QAAO,OAAA,EAAS,WAAA,CAAY,OAAO,IAAI,CAAA,EAC7E,0BAAAA,GAAAA,CAACE,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,qBAAO,CAAA,EACxB,CAAA;AAAA,IAGJ,KAAK,aAAA;AACH,MAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,gBAAgB,KAAA,EAAO,KAAA,EAAM,OAAM,OAAA,EAAS,WAAA,CAAY,OAAO,IAAI,CAAA,EAC5E,0BAAAA,GAAAA,CAACE,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,kBAAI,CAAA,EACrB,CAAA;AAAA,IAGJ,KAAK,eAAA;AACH,MAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,gBAAgB,KAAA,EAAO,KAAA,EAAM,SAAQ,OAAA,EAAS,WAAA,CAAY,OAAO,IAAI,CAAA,EAC9E,0BAAAA,GAAAA,CAACE,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,kBAAI,CAAA,EACrB,CAAA;AAAA,IAGJ,KAAK,MAAA;AACH,MAAA,OAAO,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA,IAEjC,KAAK,UAAA;AACH,MAAA,uBACEF,IAAC,SAAA,EAAA,EAAU,cAAA,EAAe,UAAS,KAAA,EAAO,MAAA,CAAO,mBAC/C,QAAA,kBAAAA,GAAAA;AAAA,QAACE,IAAAA;AAAA,QAAA;AAAA,UACC,QAAA,EAAQ,IAAA;AAAA,UACR,uBAAa,YAAA,CAAa,MAAA,CAAO,KAAA,EAAO,YAAA,CAAa,oBAAoB,CAAC,CAAA,EAAA;AAAA;AAAA,OAAK,EACnF,CAAA;AAAA,IAGJ,KAAK,oBAAA;AACH,MAAA,uBACEF,GAAAA;AAAA,QAAC,eAAA;AAAA,QAAA;AAAA,UACC,cAAA,EAAe,OAAA;AAAA,UACf,IAAA,EAAM,wBAAwB,MAAA,CAAO,KAAK,YAAY,MAAA,CAAO,KAAA,GAAQ,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,UAAA;AAAA;AAAA,OACnF;AAAA,IAGJ,KAAK,iBAAA;AACH,MAAA,uBACEA,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAe,QAAA,EAAS,OAAO,CAAA,aAAA,EAAgB,MAAA,CAAO,QAAQ,CAAA,CAAA,EACvE,QAAA,kBAAAA,GAAAA,CAACE,MAAA,EAAK,QAAA,EAAQ,IAAA,EACX,QAAA,EAAA,YAAA,CAAa,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA,EAAG,YAAA,CAAa,oBAAoB,CAAA,EAC9E,CAAA,EACF,CAAA;AAAA,IAGJ,KAAK,aAAA;AACH,MAAA,uBACEF,IAAC,SAAA,EAAA,EAAU,cAAA,EAAgB,OAAO,KAAA,EAAO,MAAA,CAAO,QAAA,EAC9C,QAAA,kBAAAA,GAAAA,CAACE,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EACX,QAAA,EAAA,YAAA,CAAa,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA,EAAG,YAAA,CAAa,oBAAoB,CAAA,EAC9E,CAAA,EACF,CAAA;AAAA,IAGJ,KAAK,OAAA;AACH,MAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,gBAAe,KAAA,EAAM,KAAA,EAAO,OAAO,SAAA,IAAa,OAAA,EACzD,QAAA,kBAAAA,GAAAA,CAACE,MAAA,EAAK,KAAA,EAAM,OAAO,QAAA,EAAA,MAAA,CAAO,KAAA,IAAS,iBAAgB,CAAA,EACrD,CAAA;AAAA,IAGJ,SAAS;AAGP,MAAA,OAAO,IAAA;AAAA,IACT;AAAA;AAEJ;AAEA,SAAS,UAAA,CACP,QACA,KAAA,EACiB;AACjB,EAAA,MAAM,EAAE,QAAA,EAAU,cAAA,EAAgB,KAAA,EAAM,GAAI,MAAA;AAE5C,EAAA,MAAM,WAAA,GAAc,QAAA,IAAY,QAAA,CAAS,MAAA,GAAS,CAAA;AAClD,EAAA,MAAM,iBAAA,GAAoB,cAAA,IAAkB,cAAA,CAAe,MAAA,GAAS,CAAA;AAEpE,EAAA,IAAI,CAAC,WAAA,IAAe,CAAC,iBAAA,EAAmB;AACtC,IAAA,uBAAOF,GAAAA,CAAC,eAAA,EAAA,EAAgB,cAAA,EAAgB,KAAA,EAAO,MAAK,iBAAA,EAAkB,CAAA;AAAA,EACxE;AAGA,EAAA,MAAM,aAAuB,EAAC;AAC9B,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,UAAA,CAAW,IAAA,CAAK,CAAA,MAAA,EAAS,QAAA,CAAS,MAAM,CAAA,KAAA,EAAQ,SAAS,MAAA,GAAS,CAAA,GAAI,GAAA,GAAM,EAAE,CAAA,CAAE,CAAA;AAAA,EAClF;AACA,EAAA,IAAI,iBAAA,EAAmB;AACrB,IAAA,UAAA,CAAW,IAAA;AAAA,MACT,CAAA,UAAA,EAAa,eAAe,MAAM,CAAA,KAAA,EAAQ,eAAe,MAAA,GAAS,CAAA,GAAI,MAAM,EAAE,CAAA;AAAA,KAChF;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,CAAA,KAAA,EAAQ,UAAA,CAAW,IAAA,CAAK,IAAI,CAAC,CAAA,CAAA;AAG3C,EAAA,MAAM,eAAA,GAAkB,oBACpB,cAAA,CACG,GAAA,CAAI,CAAC,EAAA,KAAO,KAAA,CAAM,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,EAAE,CAAA,EAAG,KAAK,CAAA,CACjD,MAAA,CAAO,CAAC,CAAA,KAAmB,CAAA,KAAM,MAAS,CAAA,GAC7C,EAAC;AAGL,EAAA,IAAI,CAAC,WAAA,IAAe,eAAA,CAAgB,MAAA,KAAW,CAAA,EAAG;AAChD,IAAA,uBAAOA,GAAAA,CAAC,eAAA,EAAA,EAAgB,cAAA,EAAgB,KAAA,EAAO,MAAM,KAAA,EAAO,CAAA;AAAA,EAC9D;AAEA,EAAA,uBACEA,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAgB,KAAA,EAAO,KAAA,EAChC,QAAA,kBAAAC,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAChB,QAAA,EAAA;AAAA,IAAA,WAAA,IACC,QAAA,CAAS,KAAA,CAAM,CAAA,EAAG,gBAAA,CAAiB,oBAAoB,CAAA,CAAE,GAAA,CAAI,CAAC,IAAA,EAAM,wBAClEH,IAAAA,CAACC,IAAAA,EAAA,EAAyB,UAAQ,IAAA,EAAC,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MAC9B;AAAA,KAAA,EAAA,EADM,CAAA,KAAA,EAAQ,GAAG,CAAA,CAEtB,CACD,CAAA;AAAA,IACF,WAAA,IAAe,QAAA,CAAS,MAAA,GAAS,gBAAA,CAAiB,oBAAA,oBACjDD,IAAAA,CAACC,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,MAAM,QAAA,CAAS,SAAS,gBAAA,CAAiB,oBAAA;AAAA,MAAqB;AAAA,KAAA,EAAK,CAAA;AAAA,IAEnF,eAAA,CAAgB,KAAA,CAAM,CAAA,EAAG,gBAAA,CAAiB,oBAAoB,CAAA,CAAE,GAAA,CAAI,CAAC,KAAA,EAAO,wBAC3ED,IAAAA,CAACC,IAAAA,EAAA,EAA8B,UAAQ,IAAA,EAAC,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MACnC;AAAA,KAAA,EAAA,EADM,CAAA,UAAA,EAAa,GAAG,CAAA,CAE3B,CACD,CAAA;AAAA,IACA,eAAA,CAAgB,SAAS,gBAAA,CAAiB,oBAAA,oBACzCD,IAAAA,CAACC,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,MACP,eAAA,CAAgB,SAAS,gBAAA,CAAiB,oBAAA;AAAA,MAAqB;AAAA,KAAA,EACvE;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,kBAAA,CACP,QACA,KAAA,EACiB;AACjB,EAAA,MAAM,EAAE,IAAA,EAAA1B,KAAAA,EAAM,OAAA,EAAS,IAAA,EAAM,IAAG,GAAI,MAAA;AACpC,EAAA,MAAM,SAAA,GAAY,SAAS,MAAA,IAAa,EAAA,KAAO,SAAY,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,EAAI,EAAE,CAAA,CAAA,GAAK,EAAA;AAC9E,EAAA,MAAM,KAAA,GAAQ,OAAA,EAAS,KAAA,CAAM,IAAI,KAAK,EAAC;AACvC,EAAA,uBACEwB,GAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAgB,KAAA;AAAA,MAChB,KAAA,EAAM,gBAAA;AAAA,MACN,SAAS,CAAA,EAAG,WAAA,CAAYxB,KAAI,CAAC,GAAG,SAAS,CAAA,CAAA;AAAA,MAEzC,QAAA,kBAAAwB,GAAAA,CAACI,GAAAA,EAAA,EAAI,eAAc,QAAA,EAChB,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,GAAA,qBAChBJ,GAAAA,CAACI,KAAA,EAAI,aAAA,EAAc,KAAA,EAA0B,GAAA,EAAK,CAAA,EAChD,QAAA,kBAAAJ,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,OAAA,EAAQ,QAAA,EAAQ,IAAA,EACzB,gBACH,CAAA,EAAA,EAH4B,CAAA,KAAA,EAAQ,GAAG,CAAA,CAIzC,CACD,CAAA,EACH;AAAA;AAAA,GACF;AAEJ;AAEA,SAAS,mBAAA,CACP,QACA,KAAA,EACiB;AACjB,EAAA,MAAM,EAAE,IAAA,EAAA1B,KAAAA,EAAM,IAAA,EAAK,GAAI,MAAA;AACvB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,EAAA,uBACEwB,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAgB,KAAA,EAAO,KAAA,EAAM,iBAAA,EAAkB,OAAA,EAAS,WAAA,CAAYxB,KAAI,CAAA,EACjF,QAAA,kBAAAwB,GAAAA,CAACI,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAChB,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,GAAA,qBAChBH,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,KAAA,EAA2B,KAAK,CAAA,EACjD,QAAA,EAAA;AAAA,oBAAAJ,IAACE,IAAAA,EAAA,EAAK,OAAM,OAAA,EAAQ,QAAA,EAAQ,MAAC,QAAA,EAAA,GAAA,EAE7B,CAAA;AAAA,oBACAF,IAACE,IAAAA,EAAA,EAAK,OAAM,OAAA,EAAQ,QAAA,EAAQ,MACzB,QAAA,EAAA,IAAA,EACH;AAAA,GAAA,EAAA,EAN4B,CAAA,MAAA,EAAS,GAAG,CAAA,CAO1C,CACD,GACH,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,kBAAA,CACP,QACA,KAAA,EACiB;AACjB,EAAA,MAAM,EAAE,IAAA,EAAA1B,KAAAA,EAAM,OAAA,EAAS,SAAQ,GAAI,MAAA;AACnC,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AACnC,EAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AACnC,EAAA,uBACEwB,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAgB,KAAA,EAAO,OAAM,gBAAA,EAAiB,OAAA,EAAS,WAAA,CAAYxB,KAAI,GAChF,QAAA,kBAAAyB,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EAChB,QAAA,EAAA;AAAA,IAAA,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,EAAM,GAAA,qBACnBH,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,KAAA,EAAyB,GAAA,EAAK,CAAA,EAC/C,QAAA,EAAA;AAAA,sBAAAJ,IAACE,IAAAA,EAAA,EAAK,OAAM,KAAA,EAAM,QAAA,EAAQ,MAAC,QAAA,EAAA,GAAA,EAE3B,CAAA;AAAA,sBACAF,IAACE,IAAAA,EAAA,EAAK,OAAM,OAAA,EAAQ,QAAA,EAAQ,MACzB,QAAA,EAAA,IAAA,EACH;AAAA,KAAA,EAAA,EAN4B,CAAA,IAAA,EAAO,GAAG,CAAA,CAOxC,CACD,CAAA;AAAA,IACA,QAAA,CAAS,GAAA,CAAI,CAAC,IAAA,EAAM,GAAA,qBACnBD,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,KAAA,EAAyB,GAAA,EAAK,CAAA,EAC/C,QAAA,EAAA;AAAA,sBAAAJ,IAACE,IAAAA,EAAA,EAAK,OAAM,OAAA,EAAQ,QAAA,EAAQ,MAAC,QAAA,EAAA,GAAA,EAE7B,CAAA;AAAA,sBACAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,QAAA,EAAQ,MAAE,QAAA,EAAA,IAAA,EAAK;AAAA,KAAA,EAAA,EAJO,CAAA,IAAA,EAAO,GAAG,CAAA,CAKxC,CACD;AAAA,GAAA,EACH,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,oBAAA,CACP,QACA,KAAA,EACiB;AACjB,EAAA,MAAM,EAAE,IAAA,EAAA1B,KAAAA,EAAM,IAAA,EAAK,GAAI,MAAA;AACvB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,EAAA,uBACEwB,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAgB,KAAA,EAAO,KAAA,EAAM,kBAAA,EAAmB,OAAA,EAAS,WAAA,CAAYxB,KAAI,CAAA,EAClF,QAAA,kBAAAwB,GAAAA,CAACI,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAChB,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,GAAA,qBAChBH,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,KAAA,EAA4B,KAAK,CAAA,EAClD,QAAA,EAAA;AAAA,oBAAAJ,IAACE,IAAAA,EAAA,EAAK,OAAM,OAAA,EAAQ,QAAA,EAAQ,MAAC,QAAA,EAAA,GAAA,EAE7B,CAAA;AAAA,oBACAF,IAACE,IAAAA,EAAA,EAAK,OAAM,OAAA,EAAQ,QAAA,EAAQ,MACzB,QAAA,EAAA,IAAA,EACH;AAAA,GAAA,EAAA,EAN4B,CAAA,OAAA,EAAU,GAAG,CAAA,CAO3C,CACD,GACH,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,mBAAA,CACP,QACA,KAAA,EACiB;AACjB,EAAA,MAAM,EAAE,IAAA,EAAA1B,KAAAA,EAAM,KAAA,EAAM,GAAI,MAAA;AACxB,EAAA,MAAM,YACJ,KAAA,EAAO,GAAA,CAAI,CAAC,IAAA,KAAS,GAAG,IAAA,CAAK,IAAA,KAAS,WAAA,GAAc,WAAA,GAAO,WAAI,CAAA,CAAA,EAAI,IAAA,CAAK,IAAI,CAAA,CAAE,KAAK,EAAC;AACtF,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,KAAc,eAAA,CAAgB,SAAA,EAAW,iBAAiB,kBAAkB,CAAA;AAC7F,EAAA,uBACEwB,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAgB,KAAA,EAAO,OAAM,MAAA,EAAO,OAAA,EAAS,WAAA,CAAYxB,KAAI,GACtE,QAAA,kBAAAyB,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EAChB,QAAA,EAAA;AAAA,IAAA,OAAA,CAAQ,IAAI,CAAC,IAAA,EAAM,wBAClBJ,GAAAA,CAACE,MAAA,EAAwB,QAAA,EAAQ,IAAA,EAC9B,QAAA,EAAA,YAAA,CAAa,MAAM,YAAA,CAAa,qBAAqB,KAD7C,CAAA,IAAA,EAAO,GAAG,EAErB,CACD,CAAA;AAAA,IACA,YAAY,CAAA,oBAAKD,KAACC,IAAAA,EAAA,EAAK,UAAQ,IAAA,EAAC,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,MAAM,SAAA;AAAA,MAAU;AAAA,KAAA,EAAK;AAAA,GAAA,EACxD,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,UAAA,CACP,QACA,KAAA,EACiB;AACjB,EAAA,MAAM,EAAE,OAAA,EAAS,IAAA,EAAM,GAAA,EAAK,QAAO,GAAI,MAAA;AACvC,EAAA,MAAM,UAAU,GAAA,GAAM,CAAA,CAAA,EAAI,YAAY,GAAA,EAAK,EAAE,CAAC,CAAA,CAAA,GAAK,EAAA;AACnD,EAAA,MAAM,OAAA,GAAU,YAAA;AAAA,IACd,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,IAAA,CAAK,KAAK,GAAG,CAAC,GAAG,OAAO,CAAA,CAAA;AAAA,IACtC,YAAA,CAAa;AAAA,GACf;AACA,EAAA,MAAM,WAAA,GAAc,MAAA,EAAQ,KAAA,CAAM,IAAI,KAAK,EAAC;AAC5C,EAAA,MAAM,EAAE,OAAA,EAAS,SAAA,EAAU,GAAI,eAAA;AAAA,IAC7B,WAAA;AAAA,IACA,gBAAA,CAAiB;AAAA,GACnB;AACA,EAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAgB,OAAO,KAAA,EAAO,CAAA,KAAA,EAAQ,OAAO,CAAA,CAAA,EACtD,QAAA,kBAAAC,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EAChB,QAAA,EAAA;AAAA,IAAA,OAAA,CAAQ,IAAI,CAAC,IAAA,EAAM,wBAClBJ,GAAAA,CAACE,MAAA,EAAwB,QAAA,EAAQ,IAAA,EAC9B,QAAA,EAAA,YAAA,CAAa,MAAM,YAAA,CAAa,qBAAqB,KAD7C,CAAA,IAAA,EAAO,GAAG,EAErB,CACD,CAAA;AAAA,IACA,YAAY,CAAA,oBAAKD,KAACC,IAAAA,EAAA,EAAK,UAAQ,IAAA,EAAC,QAAA,EAAA;AAAA,MAAA,OAAA;AAAA,MAAM,SAAA;AAAA,MAAU;AAAA,KAAA,EAAK;AAAA,GAAA,EACxD,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,WAAA,CAAY,MAAc,KAAA,EAAgC;AACjE,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAE7B,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACnC,EAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAe,MAAA,EAAO,OAAM,OAAA,EAAQ,OAAA,EAAS,CAAA,CAAA,EAAI,UAAU,KACpE,QAAA,kBAAAA,GAAAA,CAACI,GAAAA,EAAA,EAAI,eAAc,QAAA,EAChB,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,MAAM,GAAA,qBAChBJ,GAAAA,CAACE,IAAAA,EAAA,EAA0B,QAAA,EAAQ,IAAA,EAAC,IAAA,EAAK,MAAA,EACtC,kBADQ,CAAA,MAAA,EAAS,GAAG,CAAA,CAEvB,CACD,GACH,CAAA,EACF,CAAA;AAEJ;ACtcO,IAAM,aAAa,CAAC;AAAA,EACzB,IAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,KAAuB;AACrB,EAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAY,GAAI,YAAA,CAAa;AAAA,IAC1C,QAAA,EAAU,kBAAkB,MAAM;AAAA,IAAC,CAAA;AAAA,GACpC,CAAA;AACD,EAAAC,QAAAA,CAAS,WAAA,EAAa,EAAE,QAAA,EAAU,WAAW,CAAA;AAC7C,EAAA,MAAM,iBAAA,GAAoB,cAAc,IAAA,CAAK,UAAA;AAC7C,EAAA,MAAM,MAAA,GAAS,KAAK,YAAA,CAAa,MAAA,GAAS,IAAI,IAAA,CAAK,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,GAAI,EAAA;AAC7E,EAAA,MAAM,OAAO,IAAA,CAAK,WAAA,KAAgB,SAAY,MAAA,CAAO,IAAA,CAAK,WAAW,CAAA,GAAI,EAAA;AACzE,EAAA,MAAM,YAAA,GAAA,CAAgB,IAAA,CAAK,kBAAA,GAAqB,GAAA,EAAK,QAAQ,CAAC,CAAA;AAC9D,EAAA,uBACEF,IAAAA;AAAA,IAACG,GAAAA;AAAA,IAAA;AAAA,MACC,aAAA,EAAc,QAAA;AAAA,MACd,WAAA,EAAY,QAAA;AAAA,MACZ,WAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,IAAA;AAAA,MACX,YAAA,EAAc,KAAA;AAAA,MACd,UAAA,EAAY,KAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MAEb,QAAA,EAAA;AAAA,wBAAAH,IAAAA,CAACC,MAAA,EACC,QAAA,EAAA;AAAA,0BAAAF,IAACE,IAAAA,EAAA,EAAK,MAAI,IAAA,EAAC,KAAA,EAAM,QAAO,QAAA,EAAA,UAAA,EAExB,CAAA;AAAA,UACC,KAAK,cAAA,oBAAkBD,KAACC,IAAAA,EAAA,EAAK,OAAM,MAAA,EAAO,QAAA,EAAA;AAAA,YAAA,KAAA;AAAA,YAAI,IAAA,CAAK,cAAA;AAAA,YAAe;AAAA,WAAA,EAAC;AAAA,SAAA,EACtE,CAAA;AAAA,wBACAD,IAAAA,CAACC,IAAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,0BAC3BF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,SAAS,QAAA,EAAA,iBAAA,EAAkB,CAAA;AAAA,0BACvCF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,0BAC9BF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,SAAS,QAAA,EAAA,MAAA,EAAO;AAAA,SAAA,EAC9B,CAAA;AAAA,wBACAD,IAAAA,CAACC,IAAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,UAAA,EAAQ,CAAA;AAAA,0BAC3BF,GAAAA;AAAA,YAACE,IAAAA;AAAA,YAAA;AAAA,cACC,KAAA,EACE,KAAK,MAAA,KAAW,SAAA,GAAY,UAAU,IAAA,CAAK,MAAA,KAAW,cAAc,MAAA,GAAS,QAAA;AAAA,cAG9E,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,WACR;AAAA,0BACAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,WAAA,EAAS,CAAA;AAAA,0BAC5BF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,SAAS,QAAA,EAAA,IAAA,EAAK,CAAA;AAAA,0BAC1BF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,aAAA,EAAW,CAAA;AAAA,0BAC9BF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,SAAS,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,0BAChCF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,0BAC7BD,IAAAA,CAACC,IAAAA,EAAA,EAAK,OAAM,OAAA,EAAS,QAAA,EAAA;AAAA,YAAA,YAAA;AAAA,YAAa;AAAA,WAAA,EAAC;AAAA,SAAA,EACrC,CAAA;AAAA,wBACAD,IAAAA,CAACC,IAAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,0BAC1BF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,OAAA,EAAS,eAAK,KAAA,EAAM;AAAA,SAAA,EAClC,CAAA;AAAA,wBACAD,IAAAA,CAACG,GAAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAJ,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,UACzB,SAAA,mBACCD,IAAAA,CAAAI,QAAAA,EAAA,EACE,QAAA,EAAA;AAAA,4BAAAL,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,SAAS,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,4BAC3BF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,GAAA,EAAC;AAAA,WAAA,EACtB,CAAA,mBAEAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,OAAA,EAAS,eAAK,KAAA,EAAM;AAAA,SAAA,EAEpC;AAAA;AAAA;AAAA,GACF;AAEJ,CAAA;AC7DO,IAAM,gBAAA,GAAmB,CAAC,EAAE,SAAA,EAAU,KAA8C;AACzF,EAAA,MAAM,UAAA,GAAa,MAAA,CAAO,OAAA,CAAQ,SAAA,CAAU,IAAI,CAAA,CAAE,MAAA;AAAA,IAChD,CAAC,GAAG,GAAG,CAAA,KAAM,GAAA,CAAI,qBAAqB,GAAA,CAAI;AAAA,GAC5C;AAEA,EAAA,IAAI,UAAA,CAAW,MAAA,KAAW,CAAA,EAAG,OAAO,IAAA;AAEpC,EAAA,uBACEF,IAACI,GAAAA,EAAA,EAAI,eAAc,QAAA,EAAS,OAAA,EAAS,GAClC,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,CAAC,KAAA,EAAO,GAAG,CAAA,qBAC1BJ,IAAC,mBAAA,EAAA,EAAgC,GAAA,EAAA,EAAP,KAAiB,CAC5C,CAAA,EACH,CAAA;AAEJ,CAAA;AAEA,SAAS,mBAAA,CAAoB,EAAE,GAAA,EAAI,EAAmD;AACpF,EAAA,uBACEC,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EAChB,QAAA,EAAA;AAAA,IAAA,GAAA,CAAI,iBAAA,IAAqB,GAAA,CAAI,SAAA,KAAc,MAAA,oBAC1CJ,GAAAA,CAAC,kBAAA,EAAA,EAAmB,SAAA,EAAW,GAAA,CAAI,SAAA,EAAW,IAAA,EAAM,GAAA,CAAI,SAAA,EAAW,CAAA;AAAA,IAEpE,GAAA,CAAI,iBAAA,IAAqB,GAAA,CAAI,SAAA,KAAc,MAAA,oBAC1CA,GAAAA,CAAC,kBAAA,EAAA,EAAmB,SAAA,EAAW,GAAA,CAAI,SAAA,EAAW,IAAA,EAAM,IAAI,SAAA,EAAW;AAAA,GAAA,EAEvE,CAAA;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA;AACF,CAAA,EAGoB;AAClB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,CAAA,CAAA,EAAI,eAAA,CAAgB,SAAS,CAAC,CAAA,cAAA,CAAA;AAC5C,EAAA,uBACEA,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAe,MAAA,EAAO,KAAA,EAC/B,QAAA,kBAAAA,GAAAA,CAACI,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAChB,gBAAM,GAAA,CAAI,CAAC,IAAA,EAAM,GAAA,qBAChBJ,GAAAA,CAACE,IAAAA,EAAA,EAAwC,UAAQ,IAAA,EAAC,IAAA,EAAK,MAAA,EACpD,QAAA,EAAA,IAAA,EAAA,EADQ,CAAA,oBAAA,EAAuB,GAAG,CAAA,CAErC,CACD,GACH,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,kBAAA,CAAmB;AAAA,EAC1B,SAAA;AAAA,EACA;AACF,CAAA,EAGoB;AAClB,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC7B,EAAA,MAAM,KAAA,GAAQ,CAAA,CAAA,EAAI,eAAA,CAAgB,SAAS,CAAC,CAAA,eAAA,CAAA;AAC5C,EAAA,uBACEF,GAAAA,CAAC,SAAA,EAAA,EAAU,cAAA,EAAe,OAAA,EAAQ,KAAA,EAChC,QAAA,kBAAAA,GAAAA,CAACI,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAChB,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,GAAA,qBAChBJ,GAAAA,CAACE,IAAAA,EAAA,EAAyC,IAAA,EAAK,MAAA,EAC5C,QAAA,EAAA,IAAA,EAAA,EADQ,CAAA,qBAAA,EAAwB,GAAG,CAAA,CAEtC,CACD,GACH,CAAA,EACF,CAAA;AAEJ;AAEA,SAAS,gBAAgB,SAAA,EAA2B;AAClD,EAAA,MAAM,OAAA,GAAU,SAAA,CAAU,WAAA,CAAY,GAAG,CAAA;AACzC,EAAA,IAAI,UAAU,CAAA,EAAG;AACf,IAAA,OAAO,SAAA,CAAU,SAAA,CAAU,CAAA,EAAG,OAAO,CAAA;AAAA,EACvC;AACA,EAAA,OAAO,SAAA;AACT;ACjFA,SAAS,cAAA,CAAe,iBAAkC,KAAA,EAAuB;AAC/E,EAAA,OAAO,eAAA,CAAgB,EAAA,IAAM,CAAA,SAAA,EAAY,KAAK,CAAA,CAAA;AAChD;AAEA,IAAM,MAAA,GAAS,CAAC,EAAE,IAAA,EAAM,QAAO,KAA2D;AACxF,EAAA,IAAI,MAAA,EAAQ;AACV,IAAA,uBACED,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EAChB,QAAA,EAAA;AAAA,MAAA,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,QAAA,EAAU,0BAC9BJ,GAAAA,CAAC,mBAAA,EAAA,EAA0D,MAAA,EAAQ,QAAA,EAAA,EAAzC,cAAA,CAAe,QAAA,EAAU,KAAK,CAAqB,CAC9E,CAAA;AAAA,MACA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,0BAClBA,GAAAA,CAAC,MAAA,EAAA,EAAyB,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAA,EAAlC,KAAA,CAAM,KAAmC,CACvD;AAAA,KAAA,EACH,CAAA;AAAA,EAEJ;AAGA,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,GAAG,CAAC,CAAA;AACxC,EAAA,uBACEC,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,WAAA,EAAY,OAAA,EAAQ,WAAA,EAAY,MAAA,EAAO,UAAA,EAAY,CAAA,EAC7E,QAAA,EAAA;AAAA,oBAAAH,KAACC,IAAAA,EAAA,EAAK,QAAA,EAAQ,IAAA,EAAC,MAAI,IAAA,EAAC,QAAA,EAAA;AAAA,MAAA,GAAA;AAAA,MAChB,IAAA,CAAK,SAAA;AAAA,MAAU,IAAA;AAAA,sBAAED,IAAAA,CAACC,IAAAA,EAAA,EAAK,UAAQ,IAAA,EAAC,QAAA,EAAA;AAAA,QAAA,GAAA;AAAA,QAAE,UAAA;AAAA,QAAW;AAAA,OAAA,EAAC;AAAA,KAAA,EAClD,CAAA;AAAA,IACC,IAAA,CAAK,UAAA,CAAW,GAAA,CAAI,CAAC,UAAU,KAAA,qBAC9BF,GAAAA,CAAC,mBAAA,EAAA,EAA0D,QAAQ,QAAA,EAAA,EAAzC,cAAA,CAAe,QAAA,EAAU,KAAK,CAAqB,CAC9E,CAAA;AAAA,IACA,IAAA,CAAK,QAAA,CAAS,GAAA,CAAI,CAAC,0BAClBA,GAAAA,CAAC,MAAA,EAAA,EAAyB,IAAA,EAAM,KAAA,EAAO,MAAA,EAAQ,KAAA,EAAA,EAAlC,KAAA,CAAM,KAAmC,CACvD;AAAA,GAAA,EACH,CAAA;AAEJ,CAAA;AAOA,SAAS,iBACP,eAAA,EACuD;AACvD,EAAA,IAAI,eAAA,CAAgB,SAAS,eAAA,EAAiB;AAC5C,IAAA,MAAM,KAAA,GAAQ,eAAA;AAEd,IAAA,MAAM,aAAA,GAAgB,KAAA,CAAM,UAAA,CAAW,CAAC,CAAA;AACxC,IAAA,OAAO;AAAA,MACL,OAAO,KAAA,CAAM,KAAA;AAAA,MACb,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,aAAa,aAAA,EAAe;AAAA,KAC9B;AAAA,EACF;AACA,EAAA,OAAO,eAAA;AACT;AAEO,IAAM,gBAAA,GAAmB,CAAC,EAAE,UAAA,EAAW,KAA8C;AAC1F,EAAA,MAAM,SAAA,GAAYM,QAAQ,MAAM;AAC9B,IAAA,MAAM,OAAA,uBAAc,GAAA,EAAqB;AACzC,IAAA,MAAM,QAAmB,EAAC;AAE1B,IAAA,MAAM,cAAA,uBAAqB,GAAA,EAAuB;AAElD,IAAA,KAAA,MAAW,mBAAmB,UAAA,EAAY;AACxC,MAAA,MAAM,EAAE,KAAA,EAAO,SAAA,EAAW,WAAA,EAAY,GAAI,iBAAiB,eAAe,CAAA;AAE1E,MAAA,IAAI,IAAA,GAAO,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA;AAC5B,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAA,GAAO;AAAA,UACL,KAAA;AAAA,UACA,SAAA;AAAA,UACA,YAAY,EAAC;AAAA,UACb,UAAU;AAAC,SACb;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI,OAAO,IAAI,CAAA;AAGvB,QAAA,MAAM,eAAA,GAAkB,cAAA,CAAe,GAAA,CAAI,KAAK,CAAA;AAChD,QAAA,IAAI,eAAA,EAAiB;AACnB,UAAA,KAAA,MAAW,SAAS,eAAA,EAAiB;AACnC,YAAA,IAAA,CAAK,QAAA,CAAS,KAAK,KAAK,CAAA;AAExB,YAAA,MAAM,SAAA,GAAY,KAAA,CAAM,OAAA,CAAQ,KAAK,CAAA;AACrC,YAAA,IAAI,cAAc,EAAA,EAAI;AACpB,cAAA,KAAA,CAAM,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA,YAC3B;AAAA,UACF;AACA,UAAA,cAAA,CAAe,OAAO,KAAK,CAAA;AAAA,QAC7B;AAEA,QAAA,IAAI,WAAA,EAAa;AACf,UAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,GAAA,CAAI,WAAA,CAAY,KAAK,CAAA;AAChD,UAAA,IAAI,UAAA,EAAY;AACd,YAAA,UAAA,CAAW,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,UAC/B,CAAA,MAAO;AAEL,YAAA,MAAM,UAAU,cAAA,CAAe,GAAA,CAAI,WAAA,CAAY,KAAK,KAAK,EAAC;AAC1D,YAAA,OAAA,CAAQ,KAAK,IAAI,CAAA;AACjB,YAAA,cAAA,CAAe,GAAA,CAAI,WAAA,CAAY,KAAA,EAAO,OAAO,CAAA;AAC7C,YAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,UACjB;AAAA,QACF,CAAA,MAAO;AACL,UAAA,KAAA,CAAM,KAAK,IAAI,CAAA;AAAA,QACjB;AAAA,MACF;AACA,MAAA,IAAA,CAAK,UAAA,CAAW,KAAK,eAAe,CAAA;AAAA,IACtC;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,uBACEN,GAAAA,CAACI,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAChB,oBAAU,GAAA,CAAI,CAAC,yBACdJ,GAAAA,CAAC,UAAwB,IAAA,EAAY,MAAA,EAAQ,QAAhC,IAAA,CAAK,KAAiC,CACpD,CAAA,EACH,CAAA;AAEJ,CAAA;AC5HO,IAAM,qBAAqB,CAAC;AAAA,EACjC,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAgD;AAC9C,EAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAY,GAAI,YAAA,CAAa;AAAA,IAC1C,QAAA,EAAU,CAAC,QAAA,KAAa;AACtB,MAAA,IAAI,QAAA,IAAY,QAAA,CAAS,IAAA,EAAK,EAAG;AAC/B,QAAA,QAAA,CAAS,QAAA,CAAS,MAAM,CAAA;AAAA,MAC1B;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAAG,QAAAA,CAAS,WAAA,EAAa,EAAE,QAAA,EAAU,CAAA;AAElC,EAAA,IAAI,cAAc,SAAA,EAAW;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEF,KAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EAAS,WAAA,EAAY,QAAA,EAAS,WAAA,EAAY,MAAA,EAC3D,QAAA,EAAA;AAAA,oBAAAH,IAAAA,CAACC,MAAA,EACC,QAAA,EAAA;AAAA,sBAAAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAO,SAAA,KAAc,WAAA,GAAc,OAAA,GAAU,QAAA,EAAU,IAAA,EAAI,IAAA,EAC9D,QAAA,EAAA,SAAA,KAAc,WAAA,GAAc,cAAc,SAAA,EAC7C,CAAA;AAAA,sBACAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,4CAAA,EAA0C;AAAA,KAAA,EAC/D,CAAA;AAAA,oBACAD,IAAAA,CAACG,GAAAA,EAAA,EACC,QAAA,EAAA;AAAA,sBAAAJ,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,YAAA,EAAU,CAAA;AAAA,sBAC7BF,GAAAA,CAACE,IAAAA,EAAA,EAAM,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,sBACbF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EACtB;AAAA,GAAA,EACF,CAAA;AAEJ,CAAA;AClCO,IAAM,cAAc,CAAC;AAAA,EAC1B,WAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,KAAyC;AACvC,EAAA,IAAI,cAAc,SAAA,EAAW;AAC3B,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBAAOF,GAAAA,CAAC,UAAA,EAAA,EAAW,MAAM,WAAA,EAAa,UAAA,EAAwB,WAAW,KAAA,EAAO,CAAA;AAClF,CAAA;ACSO,IAAM,iBAAA,GAAoB,CAAC,OAAA,KAAsD;AACtF,EAAA,MAAM,EAAE,WAAW,KAAA,EAAO,MAAA,EAAQ,mBAAmB,gBAAA,EAAkB,OAAA,EAAS,YAAW,GACzF,OAAA;AAEF,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI,MAAA,EAAO;AACxB,EAAA,MAAM,WAAWO,MAAAA,EAAO;AAExB,EAAA,MAAM,EAAE,WAAA,EAAa,WAAA,EAAa,QAAA,KAAa,cAAA,CAAe;AAAA,IAC5D,iBAAA,EAAmB,SAAA;AAAA,IACnB,aAAA,EAAe;AAAA,GAChB,CAAA;AAED,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIT,SAAoB,SAAS,CAAA;AAC/D,EAAA,MAAM,CAAC,mBAAA,EAAqB,sBAAsB,CAAA,GAAIA,SAAS,KAAK,CAAA;AACpE,EAAA,MAAM,UAAA,GAAaU,OAA8B,IAAI,CAAA;AAErD,EAAA,MAAM,oBAAA,GAAuBT,YAAY,MAAM;AAC7C,IAAA,IAAI,WAAW,OAAA,EAAS;AACtB,MAAA,YAAA,CAAa,WAAW,OAAO,CAAA;AAC/B,MAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AAAA,IACvB;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,gBAAA,GAAmBA,YAAY,MAAM;AACzC,IAAA,oBAAA,EAAqB;AACrB,IAAA,UAAA,CAAW,OAAA,GAAU,WAAW,MAAM;AACpC,MAAA,UAAA,CAAW,EAAE,SAAA,EAAW,IAAA,EAAM,CAAA;AAC9B,MAAA,IAAA,EAAK;AAAA,IACP,GAAG,iBAAiB,CAAA;AAAA,EACtB,GAAG,CAAC,oBAAA,EAAsB,iBAAA,EAAmB,UAAA,EAAY,IAAI,CAAC,CAAA;AAE9D,EAAAU,UAAU,MAAM;AACd,IAAA,QAAA,CAAS,KAAK,CAAA;AAAA,EAChB,CAAA,EAAG,CAAC,KAAA,EAAO,QAAQ,CAAC,CAAA;AAEpB,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,gBAAA,IAAoB,gBAAA,CAAiB,MAAA,GAAS,CAAA,EAAG;AACnD,MAAA,QAAA,CAAS,uBAAuB,gBAAgB,CAAA;AAAA,IAClD;AAAA,EACF,CAAA,EAAG,CAAC,gBAAA,EAAkB,QAAA,CAAS,sBAAsB,CAAC,CAAA;AAEtD,EAAAA,UAAU,MAAM;AACd,IAAA,OAAA,CAAQ,CAAC,KAAA,KAAyB;AAChC,MAAA,QAAA,CAAS,SAAS,KAAK,CAAA;AACvB,MAAA,MAAM,MAAA,GAAS,YAAY,KAAK,CAAA;AAEhC,MAAA,IAAI,QAAQ,SAAA,EAAW;AACrB,QAAA,YAAA,CAAa,WAAW,CAAA;AACxB,QAAA,sBAAA,CAAuB,IAAI,CAAA;AAC3B,QAAA,gBAAA,EAAiB;AAAA,MACnB,CAAA,MAAA,IAAW,QAAQ,OAAA,EAAS;AAC1B,QAAA,YAAA,CAAa,SAAS,CAAA;AACtB,QAAA,sBAAA,CAAuB,IAAI,CAAA;AAC3B,QAAA,gBAAA,EAAiB;AAAA,MACnB;AAAA,IACF,CAAC,CAAA;AAAA,EACH,GAAG,CAAC,OAAA,EAAS,SAAS,QAAA,EAAU,WAAA,EAAa,gBAAgB,CAAC,CAAA;AAE9D,EAAAA,UAAU,MAAM;AACd,IAAA,OAAO,MAAM;AACX,MAAA,oBAAA,EAAqB;AAAA,IACvB,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,oBAAoB,CAAC,CAAA;AAEzB,EAAA,MAAM,oBAAA,GAAuBV,WAAAA;AAAA,IAC3B,CAAC,QAAA,KAAqB;AACpB,MAAA,IAAI,mBAAA,IAAuB,QAAA,CAAS,IAAA,EAAK,EAAG;AAC1C,QAAA,oBAAA,EAAqB;AACrB,QAAA,UAAA,CAAW,EAAE,SAAA,EAAW,QAAA,CAAS,IAAA,IAAQ,CAAA;AACzC,QAAA,IAAA,EAAK;AAAA,MACP;AAAA,IACF,CAAA;AAAA,IACA,CAAC,mBAAA,EAAqB,oBAAA,EAAsB,UAAA,EAAY,IAAI;AAAA,GAC9D;AAEA,EAAA,OAAO;AAAA,IACL,YAAY,QAAA,CAAS,UAAA;AAAA,IACrB,WAAW,QAAA,CAAS,SAAA;AAAA,IACpB,YAAY,QAAA,CAAS,UAAA;AAAA,IACrB,WAAA;AAAA,IACA,SAAA;AAAA,IACA,mBAAA;AAAA,IACA,oBAAA;AAAA,IACA,YAAA,EAAc;AAAA,GAChB;AACF,CAAA;ACvGO,IAAM,YAAA,GAAe,CAAC,KAAA,KAA6B;AACxD,EAAA,MAAM,EAAE,WAAW,KAAA,EAAO,MAAA,EAAQ,mBAAmB,gBAAA,EAAkB,OAAA,EAAS,YAAW,GACzF,KAAA;AAEF,EAAA,MAAM,EAAE,IAAA,EAAK,GAAIW,MAAAA,EAAO;AAExB,EAAA,MAAM,QAAQ,iBAAA,CAAkB;AAAA,IAC9B,SAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,iBAAA;AAAA,IACA,gBAAA;AAAA,IACA,OAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAAP,QAAAA,CAAS,CAAC,KAAA,EAAO,GAAA,KAAQ;AACvB,IAAA,IAAI,GAAA,CAAI,IAAA,IAAQ,KAAA,KAAU,GAAA,EAAK;AAC7B,MAAA,KAAA,CAAM,YAAA,EAAa;AACnB,MAAA,IAAA,EAAK;AAAA,IACP;AAAA,EACF,CAAC,CAAA;AAED,EAAA,uBACEF,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EACjB,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,gBAAA,EAAA,EAAiB,UAAA,EAAY,KAAA,CAAM,UAAA,EAAY,CAAA;AAAA,oBAChDA,GAAAA,CAAC,gBAAA,EAAA,EAAiB,SAAA,EAAW,MAAM,SAAA,EAAW,CAAA;AAAA,oBAC9CA,GAAAA;AAAA,MAAC,WAAA;AAAA,MAAA;AAAA,QACC,aAAa,KAAA,CAAM,WAAA;AAAA,QACnB,YAAY,KAAA,CAAM,UAAA;AAAA,QAClB,WAAW,KAAA,CAAM;AAAA;AAAA,KACnB;AAAA,oBACAA,GAAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,UAAU,KAAA,CAAM,mBAAA;AAAA,QAChB,WAAW,KAAA,CAAM,SAAA;AAAA,QACjB,UAAU,KAAA,CAAM;AAAA;AAAA;AAClB,GAAA,EACF,CAAA;AAEJ,CAAA;ACnCO,SAAS,gBAAgB,MAAA,EAAgD;AAC9E,EAAA,MAAM,UAAA,GAAa,IAAI,UAAA,EAAW;AAElC,EAAA,MAAM,MAAA,GAAS,IAAI,OAAA,CAAyB,CAAC,SAAS,MAAA,KAAW;AAC/D,IAAA,IAAI,QAAA,GAAW,KAAA;AAEf,IAAA,MAAM,EAAE,eAAc,GAAI,MAAA;AAAA,sBACxBA,GAAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,OAAA,EAAS,CAAC,OAAA,KAAY;AACpB,YAAA,UAAA,CAAW,WAAW,OAAO,CAAA;AAAA,UAC/B,CAAA;AAAA,UACA,UAAA,EAAY,CAACjB,OAAAA,KAAW;AACtB,YAAA,QAAA,GAAW,IAAA;AACX,YAAA,OAAA,CAAQA,OAAM,CAAA;AAAA,UAChB;AAAA;AAAA;AACF,KACF;AAEA,IAAA,aAAA,EAAc,CACX,KAAK,MAAM;AACV,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,qBAAqB,CAAC,CAAA;AAAA,MACzC;AAAA,IACF,CAAC,CAAA,CACA,KAAA,CAAM,MAAM,CAAA;AAAA,EACjB,CAAC,CAAA;AAED,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,aAAA,EAAe,CAAC,KAAA,KAAyB;AACvC,MAAA,UAAA,CAAW,KAAK,KAAK,CAAA;AAAA,IACvB;AAAA,GACF;AACF;AC3BA,IAAM,gBAAA,GAAmB,CAAC,MAAA,EAAwB,MAAA,KAA4C;AAC5F,EAAA,QAAQ,OAAO,IAAA;AAAM,IACnB,KAAK,gBAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,OAAO,IAAA,EAAK;AAAA,IACtD,KAAK,gBAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,iBAAA,EAAmB,OAAA,EAAS,OAAO,OAAA,EAAQ;AAAA,IAC5D,KAAK,eAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,eAAA,EAAiB,SAAA,EAAW,OAAO,SAAA,EAAU;AAAA,IAC9D,KAAK,YAAA;AACH,MAAA,OAAO,EAAE,MAAM,qBAAA,EAAuB,GAAA,EAAK,OAAO,GAAA,EAAK,WAAA,EAAa,OAAO,WAAA,EAAY;AAAA,IACzF,KAAK,0BAAA;AACH,MAAA,OAAO,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,OAAO,IAAA,EAAK;AAAA,IACtD;AACE,MAAA,OAAO,YAAY,MAAM,CAAA;AAAA;AAE/B,CAAA;AAMO,IAAM,YAAA,GAAe,CAAC,KAAA,KAA6B;AACxD,EAAA,MAAM;AAAA,IACJ,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,iBAAA;AAAA,IACA,iBAAA;AAAA,IACA,aAAA;AAAA,IACA,WAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,MAAM,EAAE,IAAA,EAAK,GAAI2B,MAAAA,EAAO;AAGxB,EAAA,MAAM,UAAA,GAAaJ,QAAQ,MAAM;AAC/B,IAAA,MAAM,UAAA,GAAa,iBAAA,CAAkB,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,MAAA,EAAQ,YAAA,EAAsB,CAAE,CAAA;AACzF,IAAA,MAAM,MAAA,GAAS,aAAA,CACZ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,UAAA,CAAW,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,GAAA,KAAQ,EAAE,GAAG,CAAC,CAAA,CACtD,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,MAAA,EAAQ,QAAA,EAAkB,CAAE,CAAA;AACnD,IAAA,OAAO,CAAC,GAAG,UAAA,EAAY,GAAG,MAAM,CAAA;AAAA,EAClC,CAAA,EAAG,CAAC,iBAAA,EAAmB,aAAa,CAAC,CAAA;AAGrC,EAAA,MAAM,kBAAkB,MAAsB;AAE5C,IAAA,IAAI,gBAAA,IAAoB,CAAC,YAAA,EAAc;AACrC,MAAA,OAAO,EAAE,IAAA,EAAM,eAAA,EAAiB,SAAA,EAAW,gBAAA,EAAiB;AAAA,IAC9D;AACA,IAAA,IAAI,WAAA,IAAe,WAAA,CAAY,MAAA,GAAS,CAAA,EAAG;AACzC,MAAA,OAAO,EAAE,IAAA,EAAM,iBAAA,EAAmB,IAAA,EAAM,WAAA,EAAY;AAAA,IACtD;AACA,IAAA,OAAO,EAAE,IAAA,EAAM,iBAAA,EAAmB,OAAA,EAAS,UAAA,EAAW;AAAA,EACxD,CAAA;AAEA,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,IAAI,UAAA,CAAW,gBAAA,EAAkB,QAAW,eAAe,CAAA;AACjF,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIR,QAAAA;AAAA,IAClD;AAAA,GACF;AAGA,EAAAW,UAAU,MAAM;AACd,IAAA,IAAI,oBAAoB,YAAA,EAAc;AACpC,MAAA,UAAA,CAAW;AAAA,QACT,SAAA,EAAW,gBAAA;AAAA,QACX,KAAA,EAAO,YAAA;AAAA,QACP,UAAA,EAAY;AAAA,OACb,CAAA;AACD,MAAA,IAAA,EAAK;AAAA,IACP;AAAA,EACF,GAAG,CAAC,gBAAA,EAAkB,cAAc,iBAAA,EAAmB,UAAA,EAAY,IAAI,CAAC,CAAA;AAGxE,EAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAY,WAAA,EAAa,gBAAA,KAAqB,YAAA,CAAa;AAAA,IACxE,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,MAAA,IAAI,KAAA,CAAM,IAAA,KAAS,eAAA,IAAmB,KAAA,CAAM,MAAK,EAAG;AAClD,QAAA,UAAA,CAAW;AAAA,UACT,WAAW,KAAA,CAAM,SAAA;AAAA,UACjB,KAAA,EAAO,MAAM,IAAA,EAAK;AAAA,UAClB,UAAA,EAAY;AAAA,SACb,CAAA;AACD,QAAA,IAAA,EAAK;AAAA,MACP;AAAA,IACF;AAAA,GACD,CAAA;AAED,EAAAN,SAAS,gBAAA,EAAkB,EAAE,UAAU,KAAA,CAAM,IAAA,KAAS,iBAAiB,CAAA;AAGvE,EAAA,MAAM,kBAAA,GAAqBJ,WAAAA,CAAY,CAAC,SAAA,KAAsB;AAC5D,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,eAAA,EAAiB,SAAA,EAAW,CAAA;AAAA,EAC/C,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACtB,OAAO,GAAA,KAAwB;AAC7B,MAAA,IAAI;AACF,QAAA,MAAM,WAAA,GAAc,MAAM,iBAAA,CAAkB,GAAG,CAAA;AAC/C,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,YAAA,EAAc,GAAA,EAAK,aAAa,CAAA;AAAA,MACnD,CAAA,CAAA,MAAQ;AAEN,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,YAAA,EAAc,KAAK,WAAA,EAAa,IAAI,CAAA;AAAA,MACvD;AAAA,IACF,CAAA;AAAA,IACA,CAAC,iBAAiB;AAAA,GACpB;AAEA,EAAA,MAAM,eAAA,GAAkBA,WAAAA;AAAA,IACtB,OAAO,GAAA,KAAwB;AAC7B,MAAA,IAAI;AACF,QAAA,MAAM,WAAA,GAAc,MAAM,iBAAA,CAAkB,GAAG,CAAA;AAC/C,QAAA,MAAM,gBAAA,GAAmB,YAAY,CAAC,CAAA;AACtC,QAAA,IAAI,gBAAA,EAAkB;AACpB,UAAA,qBAAA,CAAsB,gBAAgB,CAAA;AAAA,QACxC;AAEA,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,eAAA,EAAiB,SAAA,EAAW,GAAA,CAAI,WAAW,CAAA;AAAA,MAC9D,CAAA,CAAA,MAAQ;AAEN,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,eAAA,EAAiB,SAAA,EAAW,GAAA,CAAI,WAAW,CAAA;AAAA,MAC9D;AAAA,IACF,CAAA;AAAA,IACA,CAAC,iBAAiB;AAAA,GACpB;AAEA,EAAA,MAAM,sBAAA,GAAyBA,WAAAA;AAAA,IAC7B,CAAC,UAAA,KAAsC;AACrC,MAAA,qBAAA,CAAsB,UAAU,CAAA;AAEhC,MAAA,IAAI,KAAA,CAAM,SAAS,qBAAA,EAAuB;AACxC,QAAA,QAAA,CAAS,EAAE,IAAA,EAAM,eAAA,EAAiB,WAAW,KAAA,CAAM,GAAA,CAAI,WAAW,CAAA;AAAA,MACpE;AAAA,IACF,CAAA;AAAA,IACA,CAAC,KAAK;AAAA,GACR;AAEA,EAAA,MAAM,UAAA,GAAaA,YAAY,MAAM;AACnC,IAAA,IAAI,KAAA,CAAM,SAAS,qBAAA,EAAuB;AACxC,MAAA,QAAA,CAAS,EAAE,IAAA,EAAM,0BAAA,EAA4B,IAAA,EAAM,aAAa,CAAA;AAAA,IAClE;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,WAAW,CAAC,CAAA;AAEvB,EAAA,MAAM,qBAAA,GAAwBA,YAAY,MAAM;AAC9C,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,gBAAA,EAAkB,OAAA,EAAS,YAAY,CAAA;AAAA,EAC1D,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,qBAAA,GAAwBA,YAAY,MAAM;AAC9C,IAAA,QAAA,CAAS,EAAE,IAAA,EAAM,gBAAA,EAAkB,IAAA,EAAM,aAAa,CAAA;AAAA,EACxD,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAGhB,EAAAI,QAAAA,CAAS,CAAC,KAAA,EAAO,GAAA,KAAQ;AACvB,IAAA,IAAI,GAAA,CAAI,IAAA,IAAQ,KAAA,KAAU,GAAA,EAAK;AAC7B,MAAA,IAAA,EAAK;AAAA,IACP;AAAA,EACF,CAAC,CAAA;AAGD,EAAA,MAAM,YAAA,GAAeG,OAAAA;AAAA,IACnB,OAAO;AAAA,MACL,cAAA,EAAgB,kBAAA;AAAA,MAChB,eAAe,MAAM;AAAA,MAAC,CAAA;AAAA;AAAA,MACtB,WAAA,EAAa,eAAA;AAAA,MACb,WAAA,EAAa,eAAA;AAAA,MACb,oBAAoB,MAAM;AAAA,MAAC,CAAA;AAAA;AAAA,MAC3B,kBAAA,EAAoB,sBAAA;AAAA,MACpB,eAAe,MAAM;AAAA,MAAC,CAAA;AAAA;AAAA,MACtB,MAAA,EAAQ,UAAA;AAAA,MACR,iBAAA,EAAmB,qBAAA;AAAA,MACnB,iBAAA,EAAmB;AAAA,KACrB,CAAA;AAAA,IACA;AAAA,MACE,kBAAA;AAAA,MACA,eAAA;AAAA,MACA,eAAA;AAAA,MACA,sBAAA;AAAA,MACA,UAAA;AAAA,MACA,qBAAA;AAAA,MACA;AAAA;AACF,GACF;AAGA,EAAA,IAAI,oBAAoB,YAAA,EAAc;AACpC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,uBACEL,IAAAA,CAACG,GAAAA,EAAA,EAAI,eAAc,QAAA,EACjB,QAAA,EAAA;AAAA,oBAAAJ,GAAAA,CAAC,iBAAA,EAAA,EAAkB,KAAA,EAAO,YAAA,EACtB,QAAA,EAAA,CAAA,KAAA,CAAM,IAAA,KAAS,iBAAA,IACf,KAAA,CAAM,IAAA,KAAS,iBAAA,IACf,KAAA,CAAM,IAAA,KAAS,0CACfA,GAAAA;AAAA,MAAC,aAAA;AAAA,MAAA;AAAA,QACC,UAAA,EAAY,KAAA;AAAA,QACZ,cAAA,EAAgB;AAAA;AAAA,KAClB,EAEJ,CAAA;AAAA,IAEC,KAAA,CAAM,IAAA,KAAS,eAAA,oBACdC,IAAAA,CAACG,GAAAA,EAAA,EAAI,aAAA,EAAc,QAAA,EAAS,WAAA,EAAY,QAAA,EAAS,WAAA,EAAY,MAAA,EAC3D,QAAA,EAAA;AAAA,sBAAAH,IAAAA,CAACC,MAAA,EACC,QAAA,EAAA;AAAA,wBAAAF,IAACE,IAAAA,EAAA,EAAK,OAAM,MAAA,EAAO,IAAA,EAAI,MAAC,QAAA,EAAA,SAAA,EAExB,CAAA;AAAA,QAAQ,GAAA;AAAA,wBACRF,GAAAA,CAACE,IAAAA,EAAA,EAAM,gBAAM,SAAA,EAAU,CAAA;AAAA,QACtB,sCACCD,IAAAA,CAACC,IAAAA,EAAA,EAAK,OAAM,MAAA,EAAO,QAAA,EAAA;AAAA,UAAA,uBAAA;AAAA,UAAsB,kBAAA,CAAmB,UAAA;AAAA,UAAW;AAAA,SAAA,EAAC;AAAA,OAAA,EAE5E,CAAA;AAAA,sBACAD,IAAAA,CAACG,GAAAA,EAAA,EACC,QAAA,EAAA;AAAA,wBAAAJ,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,SAAA,EAAO,CAAA;AAAA,wBAC1BF,GAAAA,CAACE,IAAAA,EAAA,EAAM,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,wBAClBF,GAAAA,CAACE,IAAAA,EAAA,EAAK,KAAA,EAAM,QAAO,QAAA,EAAA,GAAA,EAAC;AAAA,OAAA,EACtB,CAAA;AAAA,sBACAF,GAAAA,CAACE,IAAAA,EAAA,EAAK,QAAA,EAAQ,MAAC,QAAA,EAAA,sBAAA,EAAoB;AAAA,KAAA,EACrC;AAAA,GAAA,EAEJ,CAAA;AAEJ,CAAA;AC7OA,eAAsB,gBAAgB,MAAA,EAAmD;AACvF,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AACtC,IAAA,IAAI,QAAA,GAAW,KAAA;AAEf,IAAA,MAAM,EAAE,eAAc,GAAIS,MAAAA;AAAA,sBACxBX,GAAAA;AAAA,QAAC,YAAA;AAAA,QAAA;AAAA,UACE,GAAG,MAAA;AAAA,UACJ,UAAA,EAAY,CAAC,MAAA,KAAW;AACtB,YAAA,QAAA,GAAW,IAAA;AACX,YAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,UAChB;AAAA;AAAA;AACF,KACF;AAEA,IAAA,aAAA,EAAc,CACX,KAAK,MAAM;AACV,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,MAAA,CAAO,IAAI,KAAA,CAAM,qBAAqB,CAAC,CAAA;AAAA,MACzC;AAAA,IACF,CAAC,CAAA,CACA,KAAA,CAAM,MAAM,CAAA;AAAA,EACjB,CAAC,CAAA;AACH;;;ACCA,IAAM,mBAAA,GAAsB,GAAA;AAErB,IAAM,YAAA,GAAe,IAAIrB,OAAAA,EAAQ,CACrC,OAAA,CAAQ,OAAO,CAAA,CACf,WAAA,CAAY,qCAAqC,CAAA,CACjD,QAAA,CAAS,aAAA,EAAe,2DAA2D,CAAA,CACnF,QAAA,CAAS,SAAA,EAAW,sDAAsD,CAAA,CAC1E,MAAA,CAAO,uBAAA,EAAyB,mCAAmC,CAAA,CACnE,MAAA,CAAO,uBAAA,EAAyB,iBAAiB,CAAA,CACjD,MAAA,CAAO,iBAAA,EAAmB,cAAc,CAAA,CACxC,MAAA;AAAA,EACC,6BAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA;AAAA,EACC,wBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,4BAAA,EAA8B,oDAAoD,CAAA,CACzF,MAAA;AAAA,EACC,qBAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,kBAAA,EAAoB,gCAAgC,CAAA,CAC3D,MAAA;AAAA,EACC,mBAAA;AAAA,EACA,gGAAA;AAAA,EACA,CAAC,KAAA,EAAe,QAAA,KAAuB,QAAA,CAAS,OAAO,KAAK,CAAA;AAAA,EAC5D;AACF,CAAA,CACC,MAAA,CAAO,WAAA,EAAa,wBAAwB,CAAA,CAC5C,MAAA,CAAO,YAAA,EAAc,6CAA6C,CAAA,CAClE,MAAA,CAAO,wBAAA,EAA0B,2CAA2C,CAAA,CAC5E,MAAA;AAAA,EACC,8BAAA;AAAA,EACA;AACF,CAAA,CACC,MAAA,CAAO,sCAAsC,uCAAuC,CAAA,CACpF,OAAO,OAAO,SAAA,EAAW,OAAO,OAAA,KAAY;AAC3C,EAAA,MAAM,QAAQc,sBAAAA,CAAuB,uBAAA,EAAyB,EAAE,SAAA,EAAW,KAAA,EAAO,SAAS,CAAA;AAE3F,EAAA,IAAI;AAEF,IAAA,MAAM,EAAE,gBAAgB,UAAA,EAAY,GAAA,EAAK,gBAAgB,KAAA,EAAO,OAAA,EAAQ,GACtE,MAAM,iBAAA,CAAkB;AAAA,MACtB,UAAA,EAAY,MAAM,OAAA,CAAQ,MAAA;AAAA,MAC1B,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,MACxB,KAAA,EAAO,MAAM,OAAA,CAAQ,KAAA;AAAA,MACrB,OAAA,EAAS,MAAM,OAAA,CAAQ,OAAA;AAAA,MACvB,QAAA,EAAU,MAAM,OAAA,CAAQ,QAAA;AAAA,MACxB,WAAA,EAAa,MAAM,OAAA,CAAQ,WAAA;AAAA,MAC3B,UAAA,EAAY,MAAM,OAAA,CAAQ,UAAA;AAAA,MAC1B,WAAW,KAAA,CAAM;AAAA,KAClB,CAAA;AAEH,IAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CAAQ,QAAA,IAAY,cAAA,CAAe,QAAA;AAC1D,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,UAAA,IAAc,eAAe,UAAA,IAAc,iBAAA;AAC5E,IAAA,MAAM,OAAA,GAAU,KAAA,CAAM,OAAA,CAAQ,OAAA,IAAW,eAAe,OAAA,IAAW,cAAA;AAGnE,IAAA,MAAM,iBAAA,GAAoB,MAAA,CAAO,IAAA,CAAK,cAAA,CAAe,OAAA,IAAW,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,GAAA,MAAS;AAAA,MAChF,GAAA;AAAA,MACA,IAAA,EAAM;AAAA,KACR,CAAE,CAAA;AACF,IAAA,MAAM,aAAA,GAAgB,iBAAiB,EAAE,CAAA;AAGzC,IAAA,MAAM,cAAc,CAAC,KAAA,CAAM,aAAa,CAAC,KAAA,CAAM,SAAS,CAAC,UAAA;AACzD,IAAA,MAAM,cAAgC,WAAA,GAClCT,WAAAA,EAAW,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,MACvB,OAAO,CAAA,CAAE,EAAA;AAAA,MACT,QAAQ,CAAA,CAAE,MAAA;AAAA,MACV,WAAW,CAAA,CAAE,oBAAA;AAAA,MACb,YAAY,CAAA,CAAE,UAAA;AAAA,MACd,WAAW,CAAA,CAAE,SAAA;AAAA,MACb,YAAY,CAAA,CAAE;AAAA,KAChB,CAAE,IACF,EAAC;AAGL,IAAA,MAAM,SAAA,GAAY,MAAM,eAAA,CAAgB;AAAA,MACtC,WAAA;AAAA,MACA,kBAAkB,KAAA,CAAM,SAAA;AAAA,MACxB,cAAc,KAAA,CAAM,KAAA;AAAA,MACpB,mBAAmB,UAAA,GACf;AAAA,QACE,IAAI,UAAA,CAAW,EAAA;AAAA,QACf,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,OAAO,UAAA,CAAW,KAAA;AAAA,QAClB,YAAY,UAAA,CAAW,UAAA;AAAA,QACvB,kBAAA,EAAoB,WAAW,kBAAA,IAAsB;AAAA,OACvD,GACA,KAAA,CAAA;AAAA,MACJ,iBAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,iBAAA,EAAmB,OAAO,CAAA,KAAwD;AAChF,QAAA,MAAM,WAAA,GAAc,yBAAA,CAA0B,CAAA,CAAE,KAAK,CAAA;AACrD,QAAA,OAAO,WAAA,CAAY,GAAA,CAAI,CAAC,EAAA,MAAQ,EAAE,GAAG,EAAA,EAAI,KAAA,EAAO,CAAA,CAAE,KAAA,EAAM,CAAE,CAAA;AAAA,MAC5D;AAAA,KACD,CAAA;AAGD,IAAA,IAAI,CAAC,UAAU,SAAA,EAAW;AACxB,MAAA,OAAA,CAAQ,MAAM,wBAAwB,CAAA;AACtC,MAAA;AAAA,IACF;AACA,IAAA,IAAI,CAAC,SAAA,CAAU,KAAA,IAAS,CAAC,UAAU,UAAA,EAAY;AAC7C,MAAA,OAAA,CAAQ,MAAM,mBAAmB,CAAA;AACjC,MAAA;AAAA,IACF;AAGA,IAAA,IAAI,iBAAA,GAAoB,SAAA,CAAU,UAAA,GAC9B,iBAAA,CAAkB,SAAA,CAAU,WAAW,KAAA,EAAO,SAAA,CAAU,UAAA,CAAW,EAAE,CAAA,GACrE,UAAA;AAEJ,IAAA,IAAI,iBAAA,IAAqB,iBAAA,CAAkB,MAAA,CAAO,GAAA,KAAQ,UAAU,SAAA,EAAW;AAC7E,MAAA,OAAA,CAAQ,KAAA;AAAA,QACN,yBAAyB,iBAAA,CAAkB,MAAA,CAAO,GAAG,CAAA,iCAAA,EAAoC,UAAU,SAAS,CAAA;AAAA,OAC9G;AACA,MAAA;AAAA,IACF;AAGA,IAAA,MAAM,eAAe4B,YAAAA,EAAa;AAClC,IAAA,MAAM,QAAA,GAAW,YAAA,GAAgBC,YAAAA,CAAa,YAAY,KAAK,KAAA,CAAA,GAAa,KAAA,CAAA;AAG5E,IAAA,IAAI,eAA8B,SAAA,CAAU,KAAA;AAC5C,IAAA,IAAI,eAAe,iBAAA,EAAmB,KAAA,IAAS,KAAA,CAAM,OAAA,CAAQ,SAASC,QAAAA,EAAS;AAE/E,IAAA,IAAI,gCAAA,GAAmC,KAAA,CAAM,OAAA,CAAQ,yBAAA,IAA6B,KAAA;AAKlF,IAAA,IAAI,gBAAA,GAAmB,IAAA;AACvB,IAAA,MAAM,0BACJ,iBAAA,GACI,yBAAA,CAA0B,kBAAkB,KAAA,EAAO,iBAAA,CAAkB,UAAU,CAAA,GAC/E,KAAA,CAAA;AAEN,IAAA,OAAO,iBAAiB,IAAA,EAAM;AAG5B,MAAA,MAAM,gBAAA,GAAmB,mBAAmB,uBAAA,GAA0B,KAAA,CAAA;AAGtE,MAAA,MAAM,QAAQA,QAAAA,EAAS;AAGvB,MAAA,MAAM,EAAE,MAAA,EAAQ,eAAA,EAAiB,aAAA,KAAkB,eAAA,CAAgB;AAAA,QACjE,WAAW,SAAA,CAAU,SAAA;AAAA,QACrB,KAAA,EAAO,YAAA;AAAA,QACP,MAAA,EAAQ;AAAA,UACN,cAAA;AAAA,UACA,KAAA;AAAA,UACA,QAAA;AAAA,UACA,UAAA;AAAA,UACA,OAAA;AAAA,UACA,kBAAA,EAAoB,mBAAmB,kBAAA,IAAsB;AAAA,SAC/D;AAAA,QACA,iBAAA,EAAmB,mBAAA;AAAA,QACnB;AAAA,OACD,CAAA;AAGD,MAAA,MAAM,YAAY,MAAMpB,GAAAA;AAAA,QACtB;AAAA,UACE,OAAA,EAAS;AAAA,YACP,KAAA,EAAO,YAAA;AAAA,YACP,KAAA;AAAA,YACA,WAAW,SAAA,CAAU,SAAA;AAAA,YACrB,KAAA,EACE,oCAAoC,iBAAA,GAChC,8BAAA,CAA+B,cAAc,iBAAiB,CAAA,GAC9D,EAAE,IAAA,EAAM,YAAA,EAAa;AAAA,YAC3B,OAAA;AAAA,YACA,KAAA;AAAA,YACA,cAAA;AAAA,YACA,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,eAAA,IAAmB,cAAA,CAAe,eAAA;AAAA,YACjE,QAAA,EAAU,KAAA,CAAM,OAAA,CAAQ,QAAA,IAAY,cAAA,CAAe,QAAA;AAAA,YACnD,UAAA,EAAY,KAAA,CAAM,OAAA,CAAQ,UAAA,IAAc,cAAA,CAAe,UAAA;AAAA,YACvD,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,OAAA,IAAW,cAAA,CAAe,OAAA;AAAA,YACjD,oBAAoB,cAAA,CAAe,kBAAA;AAAA,YACnC,gBAAgB,GAAA,CAAI,gBAAA;AAAA,YACpB,0BAA0B,cAAA,CAAe,wBAAA;AAAA,YACzC,GAAA;AAAA,YACA,OAAA,EAAS,MAAM,OAAA,CAAQ;AAAA,WACzB;AAAA,UACA,UAAA,EAAY;AAAA,SACd;AAAA,QACA;AAAA,UACE,aAAA;AAAA,UACA,eAAA,EAAiBqB,sBAAAA;AAAA,UACjB,UAAA,EAAYC,iBAAAA;AAAA,UACZ,kBAAA,EAAoBrB,yBAAAA;AAAA,UACpB,QAAA,EAAAsB,QAAAA;AAAA,UACA,WAAA,EAAArB,WAAAA;AAAA,UACA,SAAA,EAAWsB,gBAAAA;AAAA,UACX;AAAA;AACF,OACF;AAGA,MAAA,MAAM,SAAS,MAAM,eAAA;AAGrB,MAAA,MAAM,WAAA,GACJ,SAAA,CAAU,MAAA,KAAW,WAAA,IACrB,SAAA,CAAU,MAAA,KAAW,2BAAA,IACrB,SAAA,CAAU,MAAA,KAAW,gBAAA,IACrB,SAAA,CAAU,MAAA,KAAW,0BAAA;AAEvB,MAAA,IAAI,MAAA,CAAO,aAAa,WAAA,EAAa;AACnC,QAAA,YAAA,GAAe,MAAA,CAAO,SAAA;AACtB,QAAA,iBAAA,GAAoB,SAAA;AACpB,QAAA,YAAA,GAAe,SAAA,CAAU,KAAA;AAGzB,QAAA,gCAAA,GAAmC,UAAU,MAAA,KAAW,0BAAA;AAGxD,QAAA,gBAAA,GAAmB,KAAA;AAAA,MACrB,CAAA,MAAO;AACL,QAAA,YAAA,GAAe,IAAA;AAAA,MACjB;AAAA,IACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,IAAI,iBAAiB,KAAA,EAAO;AAC1B,MAAA,OAAA,CAAQ,KAAA,CAAM,MAAM,OAAO,CAAA;AAAA,IAC7B,CAAA,MAAO;AACL,MAAA,OAAA,CAAQ,MAAM,KAAK,CAAA;AAAA,IACrB;AAAA,EACF;AACF,CAAC,CAAA;;;AClQH,IAAM,OAAA,GAAU,IAAIvC,OAAAA,EAAQ,CACzB,IAAA,CAAK,eAAA,CAAY,IAAI,CAAA,CACrB,WAAA,CAAY,eAAA,CAAY,WAAW,CAAA,CACnC,OAAA,CAAQ,gBAAY,OAAO,CAAA,CAC3B,UAAA,CAAW,YAAY,CAAA,CACvB,UAAA,CAAW,UAAU,CAAA,CACrB,UAAA,CAAW,UAAU,CAAA,CACrB,UAAA,CAAW,cAAc,CAAA;AAC5B,OAAA,CAAQ,KAAA,EAAM","file":"cli.js","sourcesContent":["{\n \"name\": \"perstack\",\n \"version\": \"0.0.78\",\n \"description\": \"PerStack CLI\",\n \"author\": \"Wintermute Technologies, Inc.\",\n \"license\": \"Apache-2.0\",\n \"type\": \"module\",\n \"publishConfig\": {\n \"access\": \"public\",\n \"bin\": {\n \"perstack\": \"dist/bin/cli.js\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"pnpm run clean && tsup --config ./tsup.config.ts\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@paralleldrive/cuid2\": \"^3.0.6\",\n \"@perstack/api-client\": \"^0.0.54\",\n \"@perstack/core\": \"workspace:*\",\n \"@perstack/react\": \"workspace:*\",\n \"@perstack/runtime\": \"workspace:*\",\n \"commander\": \"^14.0.2\",\n \"dotenv\": \"^17.2.3\",\n \"ink\": \"^6.6.0\",\n \"react\": \"^19.2.3\",\n \"smol-toml\": \"^1.6.0\",\n \"@perstack/filesystem-storage\": \"workspace:*\"\n },\n \"devDependencies\": {\n \"@perstack/tui-components\": \"workspace:*\",\n \"@tsconfig/node22\": \"^22.0.5\",\n \"@types/node\": \"^25.0.10\",\n \"@types/react\": \"^19.2.9\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.18\"\n },\n \"engines\": {\n \"node\": \">=22.0.0\"\n }\n}\n","import dotenv from \"dotenv\"\n\nexport function getEnv(envPath: string[]): Record<string, string> {\n const env: Record<string, string> = Object.fromEntries(\n Object.entries(process.env)\n .filter(([_, value]) => !!value)\n .map(([key, value]) => [key, value as string]),\n )\n dotenv.config({ path: envPath, processEnv: env, quiet: true })\n return env\n}\n","import { readFile } from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { type PerstackConfig, parseWithFriendlyError, perstackConfigSchema } from \"@perstack/core\"\nimport TOML from \"smol-toml\"\n\nconst ALLOWED_CONFIG_HOSTS = [\"raw.githubusercontent.com\"]\n\nexport async function getPerstackConfig(configPath?: string): Promise<PerstackConfig> {\n const configString = await findPerstackConfigString(configPath)\n if (configString === null) {\n throw new Error(\"perstack.toml not found. Create one or specify --config path.\")\n }\n return await parsePerstackConfig(configString)\n}\n\nfunction isRemoteUrl(configPath: string): boolean {\n const lower = configPath.toLowerCase()\n return lower.startsWith(\"https://\") || lower.startsWith(\"http://\")\n}\n\nasync function fetchRemoteConfig(url: string): Promise<string> {\n let parsed: URL\n try {\n parsed = new URL(url)\n } catch {\n throw new Error(`Invalid remote config URL: ${url}`)\n }\n if (parsed.protocol !== \"https:\") {\n throw new Error(\"Remote config requires HTTPS\")\n }\n if (!ALLOWED_CONFIG_HOSTS.includes(parsed.hostname)) {\n throw new Error(`Remote config only allowed from: ${ALLOWED_CONFIG_HOSTS.join(\", \")}`)\n }\n try {\n const response = await fetch(url, { redirect: \"error\" })\n if (!response.ok) {\n throw new Error(`${response.status} ${response.statusText}`)\n }\n return await response.text()\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(`Failed to fetch remote config: ${message}`)\n }\n}\n\nasync function findPerstackConfigString(configPath?: string): Promise<string | null> {\n if (configPath) {\n if (isRemoteUrl(configPath)) {\n return await fetchRemoteConfig(configPath)\n }\n try {\n const tomlString = await readFile(path.resolve(process.cwd(), configPath), \"utf-8\")\n return tomlString\n } catch {\n throw new Error(`Given config path \"${configPath}\" is not found`)\n }\n }\n return await findPerstackConfigStringRecursively(path.resolve(process.cwd()))\n}\n\nasync function findPerstackConfigStringRecursively(cwd: string): Promise<string | null> {\n try {\n const tomlString = await readFile(path.resolve(cwd, \"perstack.toml\"), \"utf-8\")\n return tomlString\n } catch {\n if (cwd === path.parse(cwd).root) {\n return null\n }\n return await findPerstackConfigStringRecursively(path.dirname(cwd))\n }\n}\n\nasync function parsePerstackConfig(config: string): Promise<PerstackConfig> {\n const toml = TOML.parse(config ?? \"\")\n return parseWithFriendlyError(perstackConfigSchema, toml, \"perstack.toml\")\n}\n","import { readFile, writeFile } from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { createApiClient } from \"@perstack/api-client\"\nimport {\n defaultPerstackApiBaseUrl,\n type Expert,\n expertSchema,\n type Lockfile,\n type LockfileExpert,\n type PerstackConfig,\n type RuntimeVersion,\n type Skill,\n} from \"@perstack/core\"\nimport { collectToolDefinitionsForExpert } from \"@perstack/runtime\"\nimport { Command } from \"commander\"\nimport TOML from \"smol-toml\"\nimport { getEnv } from \"./lib/get-env.js\"\nimport { getPerstackConfig } from \"./lib/perstack-toml.js\"\n\nasync function findConfigPath(configPath?: string): Promise<string> {\n if (configPath) {\n return path.resolve(process.cwd(), configPath)\n }\n return await findConfigPathRecursively(process.cwd())\n}\n\nasync function findConfigPathRecursively(cwd: string): Promise<string> {\n const configPath = path.resolve(cwd, \"perstack.toml\")\n try {\n await readFile(configPath)\n return configPath\n } catch {\n if (cwd === path.parse(cwd).root) {\n throw new Error(\"perstack.toml not found. Create one or specify --config path.\")\n }\n return await findConfigPathRecursively(path.dirname(cwd))\n }\n}\n\ntype PublishedExpertData = {\n name: string\n version: string\n description?: string\n instruction: string\n minRuntimeVersion?: RuntimeVersion\n skills?: Record<\n string,\n | {\n type: \"mcpStdioSkill\"\n name: string\n description: string\n rule?: string\n pick?: string[]\n omit?: string[]\n command: \"npx\" | \"uvx\"\n packageName: string\n requiredEnv?: string[]\n }\n | {\n type: \"mcpSseSkill\"\n name: string\n description: string\n rule?: string\n pick?: string[]\n omit?: string[]\n endpoint: string\n }\n | {\n type: \"interactiveSkill\"\n name: string\n description: string\n rule?: string\n tools: Record<string, { description: string; inputJsonSchema: string }>\n }\n >\n delegates?: string[]\n tags?: string[]\n}\n\nfunction toRuntimeExpert(key: string, expert: PublishedExpertData): Expert {\n const skills: Record<string, Skill> = Object.fromEntries(\n Object.entries(expert.skills ?? {}).map(([name, skill]) => {\n switch (skill.type) {\n case \"mcpStdioSkill\":\n return [\n name,\n {\n type: skill.type,\n name,\n description: skill.description,\n rule: skill.rule,\n pick: skill.pick ?? [],\n omit: skill.omit ?? [],\n command: skill.command,\n packageName: skill.packageName,\n requiredEnv: skill.requiredEnv ?? [],\n lazyInit: false,\n },\n ]\n case \"mcpSseSkill\":\n return [\n name,\n {\n type: skill.type,\n name,\n description: skill.description,\n rule: skill.rule,\n pick: skill.pick ?? [],\n omit: skill.omit ?? [],\n endpoint: skill.endpoint,\n lazyInit: false,\n },\n ]\n case \"interactiveSkill\":\n return [\n name,\n {\n type: skill.type,\n name,\n description: skill.description,\n rule: skill.rule,\n tools: Object.fromEntries(\n Object.entries(skill.tools).map(([toolName, tool]) => [\n toolName,\n {\n name: toolName,\n description: tool.description,\n inputSchema: JSON.parse(tool.inputJsonSchema),\n },\n ]),\n ),\n },\n ]\n default: {\n throw new Error(`Unknown skill type: ${(skill as { type: string }).type}`)\n }\n }\n }),\n )\n return {\n key,\n name: expert.name,\n version: expert.version,\n minRuntimeVersion: expert.minRuntimeVersion ?? \"v1.0\",\n description: expert.description ?? \"\",\n instruction: expert.instruction,\n skills,\n delegates: expert.delegates ?? [],\n tags: expert.tags ?? [],\n }\n}\n\nfunction configExpertToExpert(\n key: string,\n configExpert: NonNullable<PerstackConfig[\"experts\"]>[string],\n): Expert {\n return expertSchema.parse({\n key,\n name: key,\n version: configExpert.version ?? \"1.0.0\",\n description: configExpert.description,\n instruction: configExpert.instruction,\n skills: configExpert.skills,\n delegates: configExpert.delegates,\n tags: configExpert.tags,\n providerTools: configExpert.providerTools,\n providerSkills: configExpert.providerSkills,\n providerToolOptions: configExpert.providerToolOptions,\n })\n}\n\nasync function resolveAllExperts(\n config: PerstackConfig,\n env: Record<string, string>,\n): Promise<Record<string, Expert>> {\n const experts: Record<string, Expert> = {}\n for (const [key, configExpert] of Object.entries(config.experts ?? {})) {\n experts[key] = configExpertToExpert(key, configExpert)\n }\n const toResolve = new Set<string>()\n for (const expert of Object.values(experts)) {\n for (const delegateKey of expert.delegates) {\n if (!experts[delegateKey]) {\n toResolve.add(delegateKey)\n }\n }\n }\n if (toResolve.size === 0) {\n return experts\n }\n const apiKey = env.PERSTACK_API_KEY\n if (!apiKey) {\n throw new Error(\"PERSTACK_API_KEY is required to resolve remote delegates\")\n }\n const client = createApiClient({\n baseUrl: config.perstackApiBaseUrl ?? defaultPerstackApiBaseUrl,\n apiKey,\n })\n while (toResolve.size > 0) {\n const delegateKey = toResolve.values().next().value\n if (!delegateKey) break\n toResolve.delete(delegateKey)\n if (experts[delegateKey]) continue\n const result = await client.experts.get(delegateKey)\n if (!result.ok) {\n throw new Error(`Failed to resolve delegate \"${delegateKey}\": ${result.error.message}`)\n }\n const publishedExpert = result.data.data.definition.experts[delegateKey]\n if (!publishedExpert) {\n throw new Error(`Expert \"${delegateKey}\" not found in API response`)\n }\n experts[delegateKey] = toRuntimeExpert(delegateKey, publishedExpert)\n for (const nestedDelegate of publishedExpert.delegates ?? []) {\n if (!experts[nestedDelegate]) {\n toResolve.add(nestedDelegate)\n }\n }\n }\n return experts\n}\n\nfunction expertToLockfileExpert(\n expert: Expert,\n toolDefinitions: {\n skillName: string\n name: string\n description?: string\n inputSchema: Record<string, unknown>\n }[],\n): LockfileExpert {\n return {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n description: expert.description,\n instruction: expert.instruction,\n skills: expert.skills,\n delegates: expert.delegates,\n tags: expert.tags,\n toolDefinitions,\n }\n}\n\nfunction generateLockfileToml(lockfile: Lockfile): string {\n return TOML.stringify(lockfile)\n}\n\nexport const installCommand = new Command()\n .command(\"install\")\n .description(\"Generate perstack.lock with tool definitions for faster startup\")\n .option(\"--config <configPath>\", \"Path to perstack.toml config file\")\n .option(\n \"--env-path <path>\",\n \"Path to the environment file (can be specified multiple times)\",\n (value: string, previous: string[]) => previous.concat(value),\n [] as string[],\n )\n .action(async (options) => {\n try {\n const configPath = await findConfigPath(options.config)\n const config = await getPerstackConfig(options.config)\n const envPath =\n options.envPath && options.envPath.length > 0\n ? options.envPath\n : (config.envPath ?? [\".env\", \".env.local\"])\n const env = getEnv(envPath)\n console.log(\"Resolving experts...\")\n const experts = await resolveAllExperts(config, env)\n console.log(`Found ${Object.keys(experts).length} expert(s)`)\n const lockfileExperts: Record<string, LockfileExpert> = {}\n for (const [key, expert] of Object.entries(experts)) {\n console.log(`Collecting tool definitions for ${key}...`)\n const toolDefinitions = await collectToolDefinitionsForExpert(expert, {\n env,\n perstackBaseSkillCommand: config.perstackBaseSkillCommand,\n })\n console.log(` Found ${toolDefinitions.length} tool(s)`)\n lockfileExperts[key] = expertToLockfileExpert(expert, toolDefinitions)\n }\n const lockfile: Lockfile = {\n version: \"1\",\n generatedAt: Date.now(),\n configPath: path.basename(configPath),\n experts: lockfileExperts,\n }\n const lockfilePath = path.join(path.dirname(configPath), \"perstack.lock\")\n const lockfileContent = generateLockfileToml(lockfile)\n await writeFile(lockfilePath, lockfileContent, \"utf-8\")\n console.log(`Generated ${lockfilePath}`)\n } catch (error) {\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`)\n } else {\n console.error(error)\n }\n process.exit(1)\n }\n })\n","import { existsSync, readdirSync, statSync } from \"node:fs\"\nimport path from \"node:path\"\nimport type { Checkpoint, Job, RunEvent, RunSetting } from \"@perstack/core\"\nimport {\n defaultRetrieveCheckpoint,\n getAllJobs,\n getAllRuns,\n getCheckpointsByJobId,\n getEventContents,\n getRunIdsByJobId,\n retrieveJob,\n} from \"@perstack/filesystem-storage\"\n\nexport interface LogDataFetcher {\n getJob(jobId: string): Promise<Job | undefined>\n getLatestJob(): Promise<Job | undefined>\n getRuns(jobId: string): Promise<RunSetting[]>\n getCheckpoints(jobId: string): Promise<Checkpoint[]>\n getCheckpoint(jobId: string, checkpointId: string): Promise<Checkpoint>\n getEvents(jobId: string, runId: string): Promise<RunEvent[]>\n getAllEventsForJob(jobId: string): Promise<RunEvent[]>\n}\n\nexport interface StorageAdapter {\n getAllJobs(): Promise<Job[]>\n retrieveJob(jobId: string): Promise<Job | undefined>\n getCheckpointsByJobId(jobId: string): Promise<Checkpoint[]>\n retrieveCheckpoint(jobId: string, checkpointId: string): Promise<Checkpoint>\n getEventContents(jobId: string, runId: string, maxStep?: number): Promise<RunEvent[]>\n getAllRuns(): Promise<RunSetting[]>\n getJobIds(): string[]\n getBasePath(): string\n}\n\nexport function createLogDataFetcher(storage: StorageAdapter): LogDataFetcher {\n return {\n async getJob(jobId: string): Promise<Job | undefined> {\n // First try to get from storage\n const job = await storage.retrieveJob(jobId)\n if (job) return job\n // Fallback: construct minimal job from checkpoints\n const checkpoints = await storage.getCheckpointsByJobId(jobId)\n if (checkpoints.length === 0) return undefined\n const firstCheckpoint = checkpoints[0]\n const lastCheckpoint = checkpoints[checkpoints.length - 1]\n return {\n id: jobId,\n coordinatorExpertKey: firstCheckpoint.expert.key,\n runtimeVersion: \"v1.0\",\n totalSteps: lastCheckpoint.stepNumber,\n usage: lastCheckpoint.usage,\n startedAt: getJobDirMtime(storage.getBasePath(), jobId),\n finishedAt: Date.now(),\n status: lastCheckpoint.status === \"completed\" ? \"completed\" : \"running\",\n }\n },\n\n async getLatestJob(): Promise<Job | undefined> {\n // First try standard storage\n const jobs = await storage.getAllJobs()\n if (jobs.length > 0) return jobs[0]\n // Fallback: scan job directories\n const jobIds = storage.getJobIds()\n if (jobIds.length === 0) return undefined\n // Sort by directory modification time (newest first)\n const basePath = storage.getBasePath()\n const sortedJobIds = jobIds\n .map((id) => ({ id, mtime: getJobDirMtime(basePath, id) }))\n .sort((a, b) => b.mtime - a.mtime)\n const latestJobId = sortedJobIds[0].id\n return this.getJob(latestJobId)\n },\n\n async getRuns(jobId: string): Promise<RunSetting[]> {\n const runs = await storage.getAllRuns()\n const jobRuns = runs.filter((r) => r.jobId === jobId)\n if (jobRuns.length > 0) return jobRuns\n // Fallback: extract unique runIds from checkpoints and return minimal run info\n const checkpoints = await storage.getCheckpointsByJobId(jobId)\n const runIds = [...new Set(checkpoints.map((c) => c.runId))]\n // Return minimal objects with just jobId and runId for event retrieval\n return runIds.map((runId) => ({ jobId, runId }) as unknown as RunSetting)\n },\n\n async getCheckpoints(jobId: string): Promise<Checkpoint[]> {\n return storage.getCheckpointsByJobId(jobId)\n },\n\n async getCheckpoint(jobId: string, checkpointId: string): Promise<Checkpoint> {\n return storage.retrieveCheckpoint(jobId, checkpointId)\n },\n\n async getEvents(jobId: string, runId: string): Promise<RunEvent[]> {\n return storage.getEventContents(jobId, runId)\n },\n\n async getAllEventsForJob(jobId: string): Promise<RunEvent[]> {\n const runs = await this.getRuns(jobId)\n const allEvents: RunEvent[] = []\n for (const run of runs) {\n const events = await storage.getEventContents(jobId, run.runId)\n allEvents.push(...events)\n }\n return allEvents.sort((a, b) => a.timestamp - b.timestamp)\n },\n }\n}\n\nfunction getJobDirMtime(basePath: string, jobId: string): number {\n try {\n const jobDir = path.join(basePath, \"jobs\", jobId)\n const stats = statSync(jobDir)\n return stats.mtimeMs\n } catch {\n return Date.now()\n }\n}\n\n/**\n * Create a storage adapter using filesystem helper functions directly.\n */\nexport function createStorageAdapter(basePath: string): StorageAdapter {\n return {\n getAllJobs: async () => getAllJobs(),\n retrieveJob: async (jobId) => retrieveJob(jobId),\n getCheckpointsByJobId: async (jobId) => getCheckpointsByJobId(jobId),\n retrieveCheckpoint: async (jobId, checkpointId) =>\n defaultRetrieveCheckpoint(jobId, checkpointId),\n getEventContents: async (jobId, runId, maxStep) => getEventContents(jobId, runId, maxStep),\n getAllRuns: async () => getAllRuns(),\n getJobIds: () => {\n const jobsDir = path.join(basePath, \"jobs\")\n if (!existsSync(jobsDir)) return []\n return readdirSync(jobsDir, { withFileTypes: true })\n .filter((d) => d.isDirectory())\n .map((d) => d.name)\n },\n getBasePath: () => basePath,\n }\n}\n","import type { RunEvent } from \"@perstack/core\"\nimport type { FilterCondition, FilterOptions, StepFilter } from \"./types.js\"\n\nexport const ERROR_EVENT_TYPES = new Set([\"stopRunByError\", \"retry\"])\nexport const TOOL_EVENT_TYPES = new Set([\n \"callTools\",\n \"resolveToolResults\",\n \"stopRunByInteractiveTool\",\n])\nexport const DELEGATION_EVENT_TYPES = new Set([\"stopRunByDelegate\"])\n\nexport function parseStepFilter(step: string): StepFilter {\n const trimmed = step.trim()\n const rangeMatch = trimmed.match(/^(\\d+)-(\\d+)$/)\n if (rangeMatch) {\n const min = Number(rangeMatch[1])\n const max = Number(rangeMatch[2])\n if (min > max) {\n throw new Error(`Invalid step range: ${step} (min ${min} > max ${max})`)\n }\n return { type: \"range\", min, max }\n }\n const gteMatch = trimmed.match(/^>=(\\d+)$/)\n if (gteMatch) {\n return { type: \"gte\", value: Number(gteMatch[1]) }\n }\n const gtMatch = trimmed.match(/^>(\\d+)$/)\n if (gtMatch) {\n return { type: \"gt\", value: Number(gtMatch[1]) }\n }\n const lteMatch = trimmed.match(/^<=(\\d+)$/)\n if (lteMatch) {\n return { type: \"lte\", value: Number(lteMatch[1]) }\n }\n const ltMatch = trimmed.match(/^<(\\d+)$/)\n if (ltMatch) {\n return { type: \"lt\", value: Number(ltMatch[1]) }\n }\n const exactMatch = trimmed.match(/^(\\d+)$/)\n if (exactMatch) {\n return { type: \"exact\", value: Number(exactMatch[1]) }\n }\n throw new Error(`Invalid step filter: ${step}`)\n}\n\nexport function parseFilterExpression(expression: string): FilterCondition {\n const trimmed = expression.trim()\n const operatorMatch = trimmed.match(/^\\.([a-zA-Z_][\\w.[\\]]*)\\s*(==|!=|>=|<=|>|<)\\s*(.+)$/)\n if (!operatorMatch) {\n throw new Error(`Invalid filter expression: ${expression}`)\n }\n const [, fieldPath, operator, rawValue] = operatorMatch\n const trimmedValue = rawValue.trim()\n if (trimmedValue === \"\") {\n throw new Error(`Missing value in filter expression: ${expression}`)\n }\n const field = parseFieldPath(fieldPath)\n const value = parseValue(trimmedValue)\n return { field, operator: operator as FilterCondition[\"operator\"], value }\n}\n\nfunction parseFieldPath(path: string): string[] {\n const parts: string[] = []\n let current = \"\"\n let i = 0\n while (i < path.length) {\n if (path[i] === \".\") {\n if (current) {\n parts.push(current)\n current = \"\"\n }\n i++\n } else if (path[i] === \"[\" && path[i + 1] === \"]\") {\n if (current) {\n parts.push(current)\n current = \"\"\n }\n parts.push(\"*\")\n i += 2\n } else {\n current += path[i]\n i++\n }\n }\n if (current) {\n parts.push(current)\n }\n return parts\n}\n\nfunction parseValue(raw: string): string | number | boolean {\n if (raw === \"true\") return true\n if (raw === \"false\") return false\n if (raw.startsWith('\"') && raw.endsWith('\"')) {\n return raw.slice(1, -1)\n }\n if (raw.startsWith(\"'\") && raw.endsWith(\"'\")) {\n return raw.slice(1, -1)\n }\n const num = Number(raw)\n if (!Number.isNaN(num)) {\n return num\n }\n return raw\n}\n\nexport function evaluateCondition(event: RunEvent, condition: FilterCondition): boolean {\n const { field, operator, value } = condition\n const actualValue = getFieldValue(event, field)\n if (actualValue === undefined) {\n return false\n }\n if (Array.isArray(actualValue)) {\n return actualValue.some((v) => compareValues(v, operator, value))\n }\n return compareValues(actualValue, operator, value)\n}\n\nfunction getFieldValue(obj: unknown, path: string[]): unknown {\n let current: unknown = obj\n for (let i = 0; i < path.length; i++) {\n const segment = path[i]\n if (current === null || current === undefined) {\n return undefined\n }\n if (segment === \"*\") {\n if (!Array.isArray(current)) {\n return undefined\n }\n const remainingPath = path.slice(i + 1)\n if (remainingPath.length === 0) {\n return current\n }\n return current\n .map((item) => getFieldValue(item, remainingPath))\n .filter((v) => v !== undefined)\n }\n if (typeof current !== \"object\") {\n return undefined\n }\n current = (current as Record<string, unknown>)[segment]\n }\n return current\n}\n\nfunction compareValues(\n actual: unknown,\n operator: FilterCondition[\"operator\"],\n expected: string | number | boolean,\n): boolean {\n switch (operator) {\n case \"==\":\n return actual === expected\n case \"!=\":\n return actual !== expected\n case \">\":\n return typeof actual === \"number\" && typeof expected === \"number\" && actual > expected\n case \">=\":\n return typeof actual === \"number\" && typeof expected === \"number\" && actual >= expected\n case \"<\":\n return typeof actual === \"number\" && typeof expected === \"number\" && actual < expected\n case \"<=\":\n return typeof actual === \"number\" && typeof expected === \"number\" && actual <= expected\n default:\n return false\n }\n}\n\nfunction matchesStepFilter(stepNumber: number, filter: StepFilter): boolean {\n switch (filter.type) {\n case \"exact\":\n return stepNumber === filter.value\n case \"gt\":\n return filter.value !== undefined && stepNumber > filter.value\n case \"gte\":\n return filter.value !== undefined && stepNumber >= filter.value\n case \"lt\":\n return filter.value !== undefined && stepNumber < filter.value\n case \"lte\":\n return filter.value !== undefined && stepNumber <= filter.value\n case \"range\":\n return (\n filter.min !== undefined &&\n filter.max !== undefined &&\n stepNumber >= filter.min &&\n stepNumber <= filter.max\n )\n default:\n return true\n }\n}\n\nexport type ApplyFiltersResult = {\n events: RunEvent[]\n totalBeforePagination: number\n matchedAfterPagination: number\n}\n\nexport function applyFilters(events: RunEvent[], options: FilterOptions): ApplyFiltersResult {\n let filtered = events\n if (options.step) {\n filtered = filtered.filter((e) => matchesStepFilter(e.stepNumber, options.step as StepFilter))\n }\n if (options.type) {\n filtered = filtered.filter((e) => e.type === options.type)\n }\n if (options.errors) {\n filtered = filtered.filter((e) => ERROR_EVENT_TYPES.has(e.type))\n }\n if (options.tools) {\n filtered = filtered.filter((e) => TOOL_EVENT_TYPES.has(e.type))\n }\n if (options.delegations) {\n filtered = filtered.filter((e) => DELEGATION_EVENT_TYPES.has(e.type))\n }\n if (options.filterExpression) {\n filtered = filtered.filter((e) =>\n evaluateCondition(e, options.filterExpression as FilterCondition),\n )\n }\n // Record total count before pagination\n const totalBeforePagination = filtered.length\n // Apply offset and take (pagination)\n const offset = options.offset ?? 0\n if (offset > 0) {\n filtered = filtered.slice(offset)\n }\n if (options.take !== undefined && options.take > 0) {\n filtered = filtered.slice(0, options.take)\n }\n // Record matched count after pagination (before context is added)\n const matchedAfterPagination = filtered.length\n // Add context events after pagination to preserve matched events\n if (options.context !== undefined && options.context > 0) {\n filtered = addContextEvents(events, filtered, options.context)\n }\n return { events: filtered, totalBeforePagination, matchedAfterPagination }\n}\n\nfunction addContextEvents(\n allEvents: RunEvent[],\n matchedEvents: RunEvent[],\n contextSize: number,\n): RunEvent[] {\n const matchedIds = new Set(matchedEvents.map((e) => e.id))\n const resultIds = new Set<string>()\n for (const event of matchedEvents) {\n const index = allEvents.findIndex((e) => e.id === event.id)\n if (index === -1) continue\n const start = Math.max(0, index - contextSize)\n const end = Math.min(allEvents.length - 1, index + contextSize)\n for (let i = start; i <= end; i++) {\n resultIds.add(allEvents[i].id)\n }\n }\n return allEvents.filter((e) => resultIds.has(e.id) || matchedIds.has(e.id))\n}\n","import type { Checkpoint, Job, RunEvent } from \"@perstack/core\"\nimport { DELEGATION_EVENT_TYPES, ERROR_EVENT_TYPES, TOOL_EVENT_TYPES } from \"./filter.js\"\nimport type { FormatterOptions, LogOutput, LogSummary } from \"./types.js\"\n\nexport function createSummary(events: RunEvent[]): LogSummary {\n if (events.length === 0) {\n return {\n totalEvents: 0,\n errorCount: 0,\n toolCallCount: 0,\n delegationCount: 0,\n }\n }\n const stepNumbers = events.map((e) => e.stepNumber)\n return {\n totalEvents: events.length,\n errorCount: events.filter((e) => ERROR_EVENT_TYPES.has(e.type)).length,\n toolCallCount: events.filter((e) => TOOL_EVENT_TYPES.has(e.type)).length,\n delegationCount: events.filter((e) => DELEGATION_EVENT_TYPES.has(e.type)).length,\n stepRange: { min: Math.min(...stepNumbers), max: Math.max(...stepNumbers) },\n }\n}\n\nexport function formatJson(output: LogOutput, options: FormatterOptions): string {\n const data: Record<string, unknown> = {\n job: output.job,\n events: output.events,\n summary: output.summary,\n }\n // Include optional fields when present\n if (output.checkpoint) {\n data.checkpoint = output.checkpoint\n }\n if (output.checkpoints && output.checkpoints.length > 0) {\n data.checkpoints = output.checkpoints\n }\n if (output.isLatestJob) {\n data.isLatestJob = true\n }\n if (output.storagePath) {\n data.storagePath = output.storagePath\n }\n if (output.totalEventsBeforeLimit !== undefined) {\n data.totalEventsBeforeLimit = output.totalEventsBeforeLimit\n }\n if (output.matchedAfterPagination !== undefined) {\n data.matchedAfterPagination = output.matchedAfterPagination\n }\n if (options.pretty) {\n return JSON.stringify(data, null, 2)\n }\n return JSON.stringify(data)\n}\n\nexport function formatTerminal(output: LogOutput, options: FormatterOptions): string {\n const lines: string[] = []\n // Show context information\n if (output.isLatestJob) {\n lines.push(\"(showing latest job)\")\n lines.push(\"\")\n }\n if (output.storagePath) {\n lines.push(`Storage: ${output.storagePath}`)\n lines.push(\"\")\n }\n if (output.job) {\n lines.push(...formatJobHeader(output.job))\n lines.push(\"\")\n }\n if (output.checkpoint && options.messages) {\n lines.push(...formatCheckpointWithMessages(output.checkpoint))\n lines.push(\"\")\n } else if (output.checkpoint) {\n lines.push(...formatCheckpointHeader(output.checkpoint))\n lines.push(\"\")\n }\n if (options.summary && output.summary) {\n lines.push(...formatSummarySection(output.summary))\n lines.push(\"\")\n }\n if (output.events.length > 0) {\n lines.push(\"Events:\")\n lines.push(\"─\".repeat(50))\n for (const event of output.events) {\n lines.push(...formatEvent(event, options.verbose))\n }\n lines.push(\"─\".repeat(50))\n // Show pagination info if events were truncated\n // Use matchedAfterPagination to compare with totalBeforeLimit, not events.length\n // (events.length may include context events which could exceed matchedAfterPagination)\n if (\n output.totalEventsBeforeLimit !== undefined &&\n output.matchedAfterPagination !== undefined &&\n output.totalEventsBeforeLimit > output.matchedAfterPagination\n ) {\n const contextNote =\n output.events.length > output.matchedAfterPagination\n ? ` (+${output.events.length - output.matchedAfterPagination} context)`\n : \"\"\n lines.push(\n `(showing ${output.matchedAfterPagination} of ${output.totalEventsBeforeLimit} matched events${contextNote})`,\n )\n lines.push(`Use --take and --offset to paginate, or --take 0 for all`)\n }\n } else if (output.totalEventsBeforeLimit !== undefined && output.totalEventsBeforeLimit > 0) {\n lines.push(`(${output.totalEventsBeforeLimit} events available, use --offset to view)`)\n }\n return lines.join(\"\\n\")\n}\n\nfunction formatJobHeader(job: Job): string[] {\n const lines: string[] = []\n lines.push(`Job: ${job.id} (${job.status})`)\n lines.push(`Expert: ${job.coordinatorExpertKey}`)\n lines.push(`Started: ${formatTimestamp(job.startedAt)}`)\n lines.push(`Steps: ${job.totalSteps}`)\n if (job.finishedAt) {\n lines.push(`Finished: ${formatTimestamp(job.finishedAt)}`)\n }\n return lines\n}\n\nfunction formatCheckpointHeader(checkpoint: Checkpoint): string[] {\n const lines: string[] = []\n lines.push(`Checkpoint: ${checkpoint.id}`)\n lines.push(`Status: ${checkpoint.status}`)\n lines.push(`Step: ${checkpoint.stepNumber}`)\n lines.push(`Expert: ${checkpoint.expert.key}`)\n return lines\n}\n\nfunction formatCheckpointWithMessages(checkpoint: Checkpoint): string[] {\n const lines: string[] = []\n lines.push(...formatCheckpointHeader(checkpoint))\n lines.push(\"\")\n lines.push(\"Messages:\")\n for (const msg of checkpoint.messages) {\n const content = extractTextContent(msg.contents)\n const preview = content.length > 100 ? `${content.slice(0, 100)}...` : content\n lines.push(` [${msg.type}] ${preview}`)\n }\n return lines\n}\n\nfunction formatSummarySection(summary: LogSummary): string[] {\n const lines: string[] = []\n lines.push(\"Summary:\")\n lines.push(` Total Events: ${summary.totalEvents}`)\n lines.push(` Errors: ${summary.errorCount}`)\n lines.push(` Tool Calls: ${summary.toolCallCount}`)\n lines.push(` Delegations: ${summary.delegationCount}`)\n if (summary.stepRange) {\n lines.push(` Step Range: ${summary.stepRange.min} - ${summary.stepRange.max}`)\n }\n return lines\n}\n\nfunction formatEvent(event: RunEvent, verbose: boolean): string[] {\n const lines: string[] = []\n const time = formatTime(event.timestamp)\n const header = `[Step ${event.stepNumber}] ${event.type}${\" \".repeat(Math.max(0, 24 - event.type.length))}${time}`\n lines.push(header)\n if (event.type === \"startRun\" && \"inputMessages\" in event) {\n const startEvent = event as { inputMessages: Array<{ type: string; contents: unknown[] }> }\n const userMsg = startEvent.inputMessages.find((m) => m.type === \"userMessage\")\n if (userMsg) {\n const text = extractTextContent(userMsg.contents)\n const preview = text.length > 60 ? `${text.slice(0, 60)}...` : text\n lines.push(` Query: \"${preview}\"`)\n }\n }\n if (event.type === \"callTools\" && \"toolCalls\" in event) {\n const toolEvent = event as {\n toolCalls: Array<{ toolName: string; skillName: string; args: Record<string, unknown> }>\n }\n if (verbose) {\n for (const tc of toolEvent.toolCalls) {\n lines.push(` [${tc.skillName}] ${tc.toolName}`)\n lines.push(` Args: ${JSON.stringify(tc.args)}`)\n }\n } else {\n const toolNames = toolEvent.toolCalls.map((tc) => tc.toolName).join(\", \")\n lines.push(` Tools: ${toolNames}`)\n }\n }\n if (event.type === \"resolveToolResults\" && \"toolResults\" in event) {\n const resultEvent = event as { toolResults: Array<{ toolName: string; result: unknown[] }> }\n for (const tr of resultEvent.toolResults) {\n const text = extractTextContent(tr.result)\n const isError = text.toLowerCase().startsWith(\"error\")\n const symbol = isError ? \"✗\" : \"✓\"\n const preview = text.length > 40 ? `${text.slice(0, 40)}...` : text\n lines.push(` ${symbol} ${tr.toolName}: ${preview}`)\n }\n }\n if (event.type === \"stopRunByError\" && \"error\" in event) {\n const errorEvent = event as { error: { name: string; message: string; isRetryable: boolean } }\n lines.push(` Error: ${errorEvent.error.name}`)\n lines.push(` Message: ${errorEvent.error.message}`)\n lines.push(` Retryable: ${errorEvent.error.isRetryable}`)\n }\n if (event.type === \"stopRunByDelegate\" && \"checkpoint\" in event) {\n const delegateEvent = event as {\n checkpoint: { delegateTo?: Array<{ expert: { key: string }; query: string }> }\n }\n for (const d of delegateEvent.checkpoint.delegateTo ?? []) {\n lines.push(` Delegate to: ${d.expert.key}`)\n }\n }\n if (event.type === \"completeRun\" && \"text\" in event) {\n const completeEvent = event as { text: string }\n const preview =\n completeEvent.text.length > 80 ? `${completeEvent.text.slice(0, 80)}...` : completeEvent.text\n lines.push(` Result: ${preview}`)\n }\n if (event.type === \"retry\" && \"reason\" in event) {\n const retryEvent = event as { reason: string }\n lines.push(` Reason: ${retryEvent.reason}`)\n }\n lines.push(\"\")\n return lines\n}\n\nfunction extractTextContent(contents: unknown[]): string {\n if (!Array.isArray(contents)) return \"\"\n for (const c of contents) {\n if (\n typeof c === \"object\" &&\n c !== null &&\n \"type\" in c &&\n c.type === \"textPart\" &&\n \"text\" in c\n ) {\n return String(c.text)\n }\n }\n return \"\"\n}\n\nfunction formatTimestamp(ts: number): string {\n const date = new Date(ts)\n return date\n .toISOString()\n .replace(\"T\", \" \")\n .replace(/\\.\\d{3}Z$/, \"\")\n}\n\nfunction formatTime(ts: number): string {\n const date = new Date(ts)\n return date.toISOString().slice(11, 19)\n}\n","import { Command } from \"commander\"\nimport {\n applyFilters,\n createLogDataFetcher,\n createStorageAdapter,\n createSummary,\n type FilterOptions,\n type FormatterOptions,\n formatJson,\n formatTerminal,\n type LogCommandOptions,\n type LogOutput,\n parseFilterExpression,\n parseStepFilter,\n} from \"./lib/log/index.js\"\n\nconst DEFAULT_TAKE = 100\nconst DEFAULT_OFFSET = 0\n\nfunction parsePositiveInt(val: string, optionName: string): number {\n const parsed = parseInt(val, 10)\n if (Number.isNaN(parsed)) {\n throw new Error(`Invalid value for ${optionName}: \"${val}\" is not a valid number`)\n }\n if (parsed < 0) {\n throw new Error(`Invalid value for ${optionName}: \"${val}\" must be non-negative`)\n }\n return parsed\n}\n\nexport const logCommand = new Command()\n .command(\"log\")\n .description(\"View execution history and events for debugging\")\n .option(\"--job <jobId>\", \"Show events for a specific job\")\n .option(\"--run <runId>\", \"Show events for a specific run\")\n .option(\"--checkpoint <checkpointId>\", \"Show checkpoint details\")\n .option(\"--step <step>\", \"Filter by step number (e.g., 5, >5, 1-10)\")\n .option(\"--type <type>\", \"Filter by event type\")\n .option(\"--errors\", \"Show error-related events only\")\n .option(\"--tools\", \"Show tool call events only\")\n .option(\"--delegations\", \"Show delegation events only\")\n .option(\"--filter <expression>\", \"Simple filter expression\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--pretty\", \"Pretty-print JSON output\")\n .option(\"--verbose\", \"Show full event details\")\n .option(\n \"--take <n>\",\n `Number of events to display (default: ${DEFAULT_TAKE}, use 0 for all)`,\n (val) => parsePositiveInt(val, \"--take\"),\n )\n .option(\"--offset <n>\", `Number of events to skip (default: ${DEFAULT_OFFSET})`, (val) =>\n parsePositiveInt(val, \"--offset\"),\n )\n .option(\"--context <n>\", \"Include N events before/after matches\", (val) =>\n parsePositiveInt(val, \"--context\"),\n )\n .option(\"--messages\", \"Show message history for checkpoint\")\n .option(\"--summary\", \"Show summarized view\")\n .action(async (options: LogCommandOptions) => {\n try {\n const storagePath = process.env.PERSTACK_STORAGE_PATH ?? `${process.cwd()}/perstack`\n const adapter = createStorageAdapter(storagePath)\n const fetcher = createLogDataFetcher(adapter)\n const filterOptions = buildFilterOptions(options)\n const formatterOptions = buildFormatterOptions(options)\n const output = await buildOutput(fetcher, options, filterOptions, storagePath)\n if (!output) {\n console.log(\"No data found\")\n return\n }\n const formatted = formatterOptions.json\n ? formatJson(output, formatterOptions)\n : formatTerminal(output, formatterOptions)\n console.log(formatted)\n } catch (error) {\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`)\n } else {\n console.error(\"An unexpected error occurred\")\n }\n process.exit(1)\n }\n })\n\nfunction buildFilterOptions(options: LogCommandOptions): FilterOptions {\n const filterOptions: FilterOptions = {}\n if (options.step) {\n filterOptions.step = parseStepFilter(options.step)\n }\n if (options.type) {\n filterOptions.type = options.type\n }\n if (options.errors) {\n filterOptions.errors = true\n }\n if (options.tools) {\n filterOptions.tools = true\n }\n if (options.delegations) {\n filterOptions.delegations = true\n }\n if (options.filter) {\n filterOptions.filterExpression = parseFilterExpression(options.filter)\n }\n // --take 0 means no limit (show all)\n const take = options.take ?? DEFAULT_TAKE\n if (take > 0) {\n filterOptions.take = take\n }\n filterOptions.offset = options.offset ?? DEFAULT_OFFSET\n if (options.context !== undefined) {\n filterOptions.context = options.context\n }\n return filterOptions\n}\n\nfunction buildFormatterOptions(options: LogCommandOptions): FormatterOptions {\n return {\n json: options.json ?? false,\n pretty: options.pretty ?? false,\n verbose: options.verbose ?? false,\n messages: options.messages ?? false,\n summary: options.summary ?? false,\n }\n}\n\nasync function buildOutput(\n fetcher: ReturnType<typeof createLogDataFetcher>,\n options: LogCommandOptions,\n filterOptions: FilterOptions,\n storagePath: string,\n): Promise<LogOutput | null> {\n if (options.checkpoint) {\n const jobId = options.job\n if (!jobId) {\n const latestJob = await fetcher.getLatestJob()\n if (!latestJob) {\n return null\n }\n const checkpoint = await fetcher.getCheckpoint(latestJob.id, options.checkpoint)\n const events = await fetcher.getEvents(latestJob.id, checkpoint.runId)\n const result = applyFilters(events, filterOptions)\n return {\n job: latestJob,\n checkpoint,\n events: result.events,\n summary: createSummary(result.events),\n isLatestJob: true,\n storagePath,\n totalEventsBeforeLimit: result.totalBeforePagination,\n matchedAfterPagination: result.matchedAfterPagination,\n }\n }\n const job = await fetcher.getJob(jobId)\n if (!job) {\n return null\n }\n const checkpoint = await fetcher.getCheckpoint(jobId, options.checkpoint)\n const events = await fetcher.getEvents(jobId, checkpoint.runId)\n const result = applyFilters(events, filterOptions)\n return {\n job,\n checkpoint,\n events: result.events,\n summary: createSummary(result.events),\n storagePath,\n totalEventsBeforeLimit: result.totalBeforePagination,\n matchedAfterPagination: result.matchedAfterPagination,\n }\n }\n if (options.run) {\n const jobId = options.job\n if (!jobId) {\n const latestJob = await fetcher.getLatestJob()\n if (!latestJob) {\n return null\n }\n const events = await fetcher.getEvents(latestJob.id, options.run)\n const result = applyFilters(events, filterOptions)\n return {\n job: latestJob,\n events: result.events,\n summary: createSummary(result.events),\n isLatestJob: true,\n storagePath,\n totalEventsBeforeLimit: result.totalBeforePagination,\n matchedAfterPagination: result.matchedAfterPagination,\n }\n }\n const job = await fetcher.getJob(jobId)\n if (!job) {\n return null\n }\n const events = await fetcher.getEvents(jobId, options.run)\n const result = applyFilters(events, filterOptions)\n return {\n job,\n events: result.events,\n summary: createSummary(result.events),\n storagePath,\n totalEventsBeforeLimit: result.totalBeforePagination,\n matchedAfterPagination: result.matchedAfterPagination,\n }\n }\n if (options.job) {\n const job = await fetcher.getJob(options.job)\n if (!job) {\n return null\n }\n const events = await fetcher.getAllEventsForJob(options.job)\n const result = applyFilters(events, filterOptions)\n const checkpoints = await fetcher.getCheckpoints(options.job)\n return {\n job,\n checkpoints,\n events: result.events,\n summary: createSummary(result.events),\n storagePath,\n totalEventsBeforeLimit: result.totalBeforePagination,\n matchedAfterPagination: result.matchedAfterPagination,\n }\n }\n const latestJob = await fetcher.getLatestJob()\n if (!latestJob) {\n return null\n }\n const events = await fetcher.getAllEventsForJob(latestJob.id)\n const result = applyFilters(events, filterOptions)\n return {\n job: latestJob,\n events: result.events,\n summary: createSummary(result.events),\n isLatestJob: true,\n storagePath,\n totalEventsBeforeLimit: result.totalBeforePagination,\n matchedAfterPagination: result.matchedAfterPagination,\n }\n}\n","import type { ProviderConfig, ProviderName, ProviderTable } from \"@perstack/core\"\n\ntype SettingRecord = Record<string, unknown>\n\nexport function getProviderConfig(\n provider: ProviderName,\n env: Record<string, string>,\n providerTable?: ProviderTable,\n): ProviderConfig {\n const setting = (providerTable?.setting ?? {}) as SettingRecord\n switch (provider) {\n case \"anthropic\": {\n const apiKey = env.ANTHROPIC_API_KEY\n if (!apiKey) throw new Error(\"ANTHROPIC_API_KEY is not set\")\n return {\n providerName: \"anthropic\",\n apiKey,\n baseUrl: (setting.baseUrl as string | undefined) ?? env.ANTHROPIC_BASE_URL,\n headers: setting.headers as Record<string, string> | undefined,\n }\n }\n case \"google\": {\n const apiKey = env.GOOGLE_GENERATIVE_AI_API_KEY\n if (!apiKey) throw new Error(\"GOOGLE_GENERATIVE_AI_API_KEY is not set\")\n return {\n providerName: \"google\",\n apiKey,\n baseUrl: (setting.baseUrl as string | undefined) ?? env.GOOGLE_GENERATIVE_AI_BASE_URL,\n headers: setting.headers as Record<string, string> | undefined,\n }\n }\n case \"openai\": {\n const apiKey = env.OPENAI_API_KEY\n if (!apiKey) throw new Error(\"OPENAI_API_KEY is not set\")\n return {\n providerName: \"openai\",\n apiKey,\n baseUrl: (setting.baseUrl as string | undefined) ?? env.OPENAI_BASE_URL,\n organization: (setting.organization as string | undefined) ?? env.OPENAI_ORGANIZATION,\n project: (setting.project as string | undefined) ?? env.OPENAI_PROJECT,\n name: setting.name as string | undefined,\n headers: setting.headers as Record<string, string> | undefined,\n }\n }\n case \"ollama\": {\n return {\n providerName: \"ollama\",\n baseUrl: (setting.baseUrl as string | undefined) ?? env.OLLAMA_BASE_URL,\n headers: setting.headers as Record<string, string> | undefined,\n }\n }\n case \"azure-openai\": {\n const apiKey = env.AZURE_API_KEY\n if (!apiKey) throw new Error(\"AZURE_API_KEY is not set\")\n const resourceName = (setting.resourceName as string | undefined) ?? env.AZURE_RESOURCE_NAME\n const baseUrl = (setting.baseUrl as string | undefined) ?? env.AZURE_BASE_URL\n if (!resourceName && !baseUrl) throw new Error(\"AZURE_RESOURCE_NAME or baseUrl is not set\")\n return {\n providerName: \"azure-openai\",\n apiKey,\n resourceName,\n apiVersion: (setting.apiVersion as string | undefined) ?? env.AZURE_API_VERSION,\n baseUrl,\n headers: setting.headers as Record<string, string> | undefined,\n useDeploymentBasedUrls: setting.useDeploymentBasedUrls as boolean | undefined,\n }\n }\n case \"amazon-bedrock\": {\n const accessKeyId = env.AWS_ACCESS_KEY_ID\n const secretAccessKey = env.AWS_SECRET_ACCESS_KEY\n const sessionToken = env.AWS_SESSION_TOKEN\n if (!accessKeyId) throw new Error(\"AWS_ACCESS_KEY_ID is not set\")\n if (!secretAccessKey) throw new Error(\"AWS_SECRET_ACCESS_KEY is not set\")\n const region = (setting.region as string | undefined) ?? env.AWS_REGION\n if (!region) throw new Error(\"AWS_REGION is not set\")\n return {\n providerName: \"amazon-bedrock\",\n accessKeyId,\n secretAccessKey,\n region,\n sessionToken,\n }\n }\n case \"google-vertex\": {\n return {\n providerName: \"google-vertex\",\n project: (setting.project as string | undefined) ?? env.GOOGLE_VERTEX_PROJECT,\n location: (setting.location as string | undefined) ?? env.GOOGLE_VERTEX_LOCATION,\n baseUrl: (setting.baseUrl as string | undefined) ?? env.GOOGLE_VERTEX_BASE_URL,\n headers: setting.headers as Record<string, string> | undefined,\n }\n }\n case \"deepseek\": {\n const apiKey = env.DEEPSEEK_API_KEY\n if (!apiKey) throw new Error(\"DEEPSEEK_API_KEY is not set\")\n return {\n providerName: \"deepseek\",\n apiKey,\n baseUrl: (setting.baseUrl as string | undefined) ?? env.DEEPSEEK_BASE_URL,\n headers: setting.headers as Record<string, string> | undefined,\n }\n }\n }\n}\n","import { existsSync, readFileSync } from \"node:fs\"\nimport type { Checkpoint, Job, RunEvent, RunSetting } from \"@perstack/core\"\nimport { checkpointSchema } from \"@perstack/core\"\nimport {\n getCheckpointPath,\n getRunIdsByJobId,\n getAllJobs as runtimeGetAllJobs,\n getAllRuns as runtimeGetAllRuns,\n getCheckpointsByJobId as runtimeGetCheckpointsByJobId,\n getEventContents as runtimeGetEventContents,\n} from \"@perstack/filesystem-storage\"\n\nexport function getAllJobs(): Job[] {\n return runtimeGetAllJobs()\n}\n\nexport function getAllRuns(): RunSetting[] {\n return runtimeGetAllRuns()\n}\n\nexport function getMostRecentRun(): RunSetting {\n const runs = getAllRuns()\n if (runs.length === 0) {\n throw new Error(\"No runs found\")\n }\n return runs[0]\n}\n\nexport function getCheckpointsByJobId(jobId: string): Checkpoint[] {\n return runtimeGetCheckpointsByJobId(jobId)\n}\n\nexport function getMostRecentCheckpoint(jobId?: string): Checkpoint {\n const targetJobId = jobId ?? getMostRecentRun().jobId\n const checkpoints = getCheckpointsByJobId(targetJobId)\n if (checkpoints.length === 0) {\n throw new Error(`No checkpoints found for job ${targetJobId}`)\n }\n return checkpoints[checkpoints.length - 1]\n}\n\nexport function getRecentExperts(\n limit: number,\n): Array<{ key: string; name: string; lastUsed: number }> {\n const runs = getAllRuns()\n const expertMap = new Map<string, { key: string; name: string; lastUsed: number }>()\n for (const setting of runs) {\n const expertKey = setting.expertKey\n if (!expertMap.has(expertKey) || expertMap.get(expertKey)!.lastUsed < setting.updatedAt) {\n expertMap.set(expertKey, {\n key: expertKey,\n name: expertKey,\n lastUsed: setting.updatedAt,\n })\n }\n }\n return Array.from(expertMap.values())\n .sort((a, b) => b.lastUsed - a.lastUsed)\n .slice(0, limit)\n}\n\nexport function getCheckpointById(jobId: string, checkpointId: string): Checkpoint {\n const checkpointPath = getCheckpointPath(jobId, checkpointId)\n if (!existsSync(checkpointPath)) {\n throw new Error(`Checkpoint ${checkpointId} not found in job ${jobId}`)\n }\n const checkpoint = readFileSync(checkpointPath, \"utf-8\")\n return checkpointSchema.parse(JSON.parse(checkpoint))\n}\n\nexport function getCheckpointsWithDetails(\n jobId: string,\n): { id: string; runId: string; stepNumber: number; contextWindowUsage: number }[] {\n return getCheckpointsByJobId(jobId)\n .map((cp) => ({\n id: cp.id,\n runId: cp.runId,\n stepNumber: cp.stepNumber,\n contextWindowUsage: cp.contextWindowUsage ?? 0,\n }))\n .sort((a, b) => b.stepNumber - a.stepNumber)\n}\n\nexport function getEventContents(jobId: string, runId: string, maxStepNumber?: number): RunEvent[] {\n return runtimeGetEventContents(jobId, runId, maxStepNumber)\n}\n\nexport function getAllEventContentsForJob(jobId: string, maxStepNumber?: number): RunEvent[] {\n const runIds = getRunIdsByJobId(jobId)\n const allEvents: RunEvent[] = []\n for (const runId of runIds) {\n const events = runtimeGetEventContents(jobId, runId, maxStepNumber)\n allEvents.push(...events)\n }\n return allEvents.sort((a, b) => a.timestamp - b.timestamp)\n}\n","import type { Checkpoint, PerstackConfig, ProviderConfig, ProviderName } from \"@perstack/core\"\nimport { getEnv } from \"./get-env.js\"\nimport { getPerstackConfig } from \"./perstack-toml.js\"\nimport { getProviderConfig } from \"./provider-config.js\"\nimport { getCheckpointById, getMostRecentCheckpoint } from \"./run-manager.js\"\n\nconst defaultProvider: ProviderName = \"anthropic\"\nconst defaultModel = \"claude-sonnet-4-5\"\n\nexport type ExpertConfig = NonNullable<PerstackConfig[\"experts\"]>[string]\n\nexport type RunContext = {\n perstackConfig: PerstackConfig\n checkpoint: Checkpoint | undefined\n env: Record<string, string>\n providerConfig: ProviderConfig\n model: string\n experts: Record<string, ExpertConfig & { name: string; version: string }>\n}\n\nexport type ResolveRunContextInput = {\n configPath?: string\n provider?: string\n model?: string\n envPath?: string[]\n continue?: boolean\n continueJob?: string\n resumeFrom?: string\n expertKey?: string\n}\n\nexport async function resolveRunContext(input: ResolveRunContextInput): Promise<RunContext> {\n const perstackConfig = await getPerstackConfig(input.configPath)\n let checkpoint: Checkpoint | undefined\n if (input.resumeFrom) {\n if (!input.continueJob) {\n throw new Error(\"--resume-from requires --continue-job\")\n }\n checkpoint = getCheckpointById(input.continueJob, input.resumeFrom)\n } else if (input.continueJob) {\n checkpoint = getMostRecentCheckpoint(input.continueJob)\n } else if (input.continue) {\n checkpoint = getMostRecentCheckpoint()\n }\n if ((input.continue || input.continueJob || input.resumeFrom) && !checkpoint) {\n throw new Error(\"No checkpoint found\")\n }\n\n if (checkpoint && input.expertKey && checkpoint.expert.key !== input.expertKey) {\n throw new Error(\n `Checkpoint expert key ${checkpoint.expert.key} does not match input expert key ${input.expertKey}`,\n )\n }\n\n const envPath =\n input.envPath && input.envPath.length > 0\n ? input.envPath\n : (perstackConfig.envPath ?? [\".env\", \".env.local\"])\n const env = getEnv(envPath)\n const provider = (input.provider ??\n perstackConfig.provider?.providerName ??\n defaultProvider) as ProviderName\n const model = input.model ?? perstackConfig.model ?? defaultModel\n const providerConfig = getProviderConfig(provider, env, perstackConfig.provider)\n\n const experts = Object.fromEntries(\n Object.entries(perstackConfig.experts ?? {}).map(([name, expert]) => {\n return [\n name,\n {\n name,\n version: expert.version ?? \"1.0.0\",\n description: expert.description,\n instruction: expert.instruction,\n skills: expert.skills,\n delegates: expert.delegates,\n tags: expert.tags,\n },\n ]\n }),\n )\n\n return {\n perstackConfig,\n checkpoint,\n env,\n providerConfig,\n model,\n experts: experts as Record<string, ExpertConfig & { name: string; version: string }>,\n }\n}\n","import type { Checkpoint } from \"@perstack/core\"\n\ntype InteractiveToolCallResult = {\n toolCallId: string\n toolName: string\n skillName: string\n text: string\n}\nexport function parseInteractiveToolCallResult(\n query: string,\n checkpoint: Checkpoint,\n): {\n interactiveToolCallResult: InteractiveToolCallResult\n} {\n const lastMessage = checkpoint.messages[checkpoint.messages.length - 1]\n if (lastMessage.type !== \"expertMessage\") {\n throw new Error(\"Last message is not a expert message\")\n }\n // Find the first toolCallPart (may not be contents[0] if thinkingPart is present)\n const content = lastMessage.contents.find((c) => c.type === \"toolCallPart\")\n if (!content || content.type !== \"toolCallPart\") {\n throw new Error(\"Last message content is not a tool call part\")\n }\n const toolCallId = content.toolCallId\n const toolName = content.toolName\n const pendingToolCall = checkpoint.pendingToolCalls?.find((tc) => tc.id === toolCallId)\n const skillName = pendingToolCall?.skillName ?? \"\"\n return {\n interactiveToolCallResult: {\n toolCallId,\n toolName,\n skillName,\n text: query,\n },\n }\n}\nexport function parseInteractiveToolCallResultJson(\n query: string,\n): { interactiveToolCallResult: InteractiveToolCallResult } | null {\n try {\n const parsed = JSON.parse(query) as unknown\n if (\n typeof parsed === \"object\" &&\n parsed !== null &&\n \"toolCallId\" in parsed &&\n \"toolName\" in parsed &&\n \"skillName\" in parsed &&\n \"text\" in parsed\n ) {\n return {\n interactiveToolCallResult: parsed as InteractiveToolCallResult,\n }\n }\n return null\n } catch {\n return null\n }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { RunEvent, RuntimeEvent } from \"@perstack/core\"\nimport {\n createFilteredEventListener,\n parseWithFriendlyError,\n runCommandInputSchema,\n validateEventFilter,\n} from \"@perstack/core\"\nimport {\n createInitialJob,\n defaultRetrieveCheckpoint,\n defaultStoreCheckpoint,\n defaultStoreEvent,\n retrieveJob,\n storeJob,\n} from \"@perstack/filesystem-storage\"\nimport { findLockfile, loadLockfile, run as perstackRun } from \"@perstack/runtime\"\nimport { Command } from \"commander\"\nimport { resolveRunContext } from \"./lib/context.js\"\nimport {\n parseInteractiveToolCallResult,\n parseInteractiveToolCallResultJson,\n} from \"./lib/interactive.js\"\n\nconst defaultEventListener = (event: RunEvent | RuntimeEvent) => console.log(JSON.stringify(event))\n\nexport const runCommand = new Command()\n .command(\"run\")\n .description(\"Run Perstack with JSON output\")\n .argument(\"<expertKey>\", \"Expert key to run\")\n .argument(\"<query>\", \"Query to run\")\n .option(\"--config <configPath>\", \"Path to perstack.toml config file\")\n .option(\"--provider <provider>\", \"Provider to use\")\n .option(\"--model <model>\", \"Model to use\")\n .option(\n \"--reasoning-budget <budget>\",\n \"Reasoning budget for native LLM reasoning (minimal, low, medium, high, or token count)\",\n )\n .option(\n \"--max-steps <maxSteps>\",\n \"Maximum number of steps to run, default is undefined (no limit)\",\n )\n .option(\"--max-retries <maxRetries>\", \"Maximum number of generation retries, default is 5\")\n .option(\n \"--timeout <timeout>\",\n \"Timeout for each generation in milliseconds, default is 300000 (5 minutes)\",\n )\n .option(\"--job-id <jobId>\", \"Job ID for identifying the job\")\n .option(\n \"--env-path <path>\",\n \"Path to the environment file (can be specified multiple times), default is .env and .env.local\",\n (value: string, previous: string[]) => previous.concat(value),\n [] as string[],\n )\n .option(\"--verbose\", \"Enable verbose logging\")\n .option(\"--continue\", \"Continue the most recent job with new query\")\n .option(\"--continue-job <jobId>\", \"Continue the specified job with new query\")\n .option(\n \"--resume-from <checkpointId>\",\n \"Resume from a specific checkpoint (requires --continue or --continue-job)\",\n )\n .option(\"-i, --interactive-tool-call-result\", \"Query is interactive tool call result\")\n .option(\n \"--filter <types>\",\n \"Filter events by type (comma-separated, e.g., completeRun,stopRunByError)\",\n )\n .action(async (expertKey, query, options) => {\n const input = parseWithFriendlyError(runCommandInputSchema, { expertKey, query, options })\n\n // Validate and apply event filter if specified\n let eventListener = defaultEventListener\n if (input.options.filter && input.options.filter.length > 0) {\n try {\n const validatedTypes = validateEventFilter(input.options.filter)\n const allowedTypes = new Set(validatedTypes)\n eventListener = createFilteredEventListener(defaultEventListener, allowedTypes)\n } catch (error) {\n if (error instanceof Error) {\n console.error(error.message)\n } else {\n console.error(error)\n }\n process.exit(1)\n }\n }\n\n try {\n const { perstackConfig, checkpoint, env, providerConfig, model, experts } =\n await resolveRunContext({\n configPath: input.options.config,\n provider: input.options.provider,\n model: input.options.model,\n envPath: input.options.envPath,\n continue: input.options.continue,\n continueJob: input.options.continueJob,\n resumeFrom: input.options.resumeFrom,\n expertKey: input.expertKey,\n })\n\n // Load lockfile if present\n const lockfilePath = findLockfile()\n const lockfile = lockfilePath ? (loadLockfile(lockfilePath) ?? undefined) : undefined\n\n // Generate job and run IDs\n const jobId = checkpoint?.jobId ?? input.options.jobId ?? createId()\n const runId = createId()\n\n await perstackRun(\n {\n setting: {\n jobId,\n runId,\n expertKey: input.expertKey,\n input: input.options.interactiveToolCallResult\n ? (parseInteractiveToolCallResultJson(input.query) ??\n (checkpoint\n ? parseInteractiveToolCallResult(input.query, checkpoint)\n : { text: input.query }))\n : { text: input.query },\n experts,\n model,\n providerConfig,\n reasoningBudget: input.options.reasoningBudget ?? perstackConfig.reasoningBudget,\n maxSteps: input.options.maxSteps ?? perstackConfig.maxSteps,\n maxRetries: input.options.maxRetries ?? perstackConfig.maxRetries,\n timeout: input.options.timeout ?? perstackConfig.timeout,\n perstackApiBaseUrl: perstackConfig.perstackApiBaseUrl,\n perstackApiKey: env.PERSTACK_API_KEY,\n perstackBaseSkillCommand: perstackConfig.perstackBaseSkillCommand,\n env,\n proxyUrl: process.env.PERSTACK_PROXY_URL,\n verbose: input.options.verbose,\n },\n checkpoint,\n },\n {\n eventListener,\n storeCheckpoint: defaultStoreCheckpoint,\n storeEvent: defaultStoreEvent,\n retrieveCheckpoint: defaultRetrieveCheckpoint,\n storeJob,\n retrieveJob,\n createJob: createInitialJob,\n lockfile,\n },\n )\n } catch (error) {\n if (error instanceof Error) {\n console.error(error.message)\n } else {\n console.error(error)\n }\n process.exit(1)\n }\n })\n","import type { PerstackEvent } from \"../types/index.js\"\n\ntype ErrorLogger = (message: string, error: unknown) => void\nconst defaultErrorLogger: ErrorLogger = (message, error) => {\n console.error(message, error)\n}\ntype EventQueueOptions = {\n onError?: (error: unknown) => void\n errorLogger?: ErrorLogger\n}\nexport class EventQueue {\n private static readonly MAX_PENDING_EVENTS = 1000\n private pendingEvents: PerstackEvent[] = []\n private handler: ((event: PerstackEvent) => void) | null = null\n private readonly onError?: (error: unknown) => void\n private readonly errorLogger: ErrorLogger\n constructor(options?: EventQueueOptions) {\n this.onError = options?.onError\n this.errorLogger = options?.errorLogger ?? defaultErrorLogger\n }\n setHandler(fn: (event: PerstackEvent) => void): void {\n this.handler = fn\n for (const event of this.pendingEvents) {\n this.safeHandle(event)\n }\n this.pendingEvents.length = 0\n }\n emit(event: PerstackEvent): void {\n if (this.handler) {\n this.safeHandle(event)\n } else {\n if (this.pendingEvents.length >= EventQueue.MAX_PENDING_EVENTS) {\n this.pendingEvents.shift()\n }\n this.pendingEvents.push(event)\n }\n }\n private safeHandle(event: PerstackEvent): void {\n try {\n this.handler?.(event)\n } catch (error) {\n if (this.onError) {\n this.onError(error)\n } else {\n this.errorLogger(\"EventQueue handler error:\", error)\n }\n }\n }\n}\n","import { createContext, useContext } from \"react\"\nimport type {\n BrowsingEventsState,\n CheckpointHistoryItem,\n EventHistoryItem,\n JobHistoryItem,\n} from \"../types/index.js\"\nexport type InputAreaContextValue = {\n onExpertSelect: (expertKey: string) => void\n onQuerySubmit: (query: string) => void\n onJobSelect: (job: JobHistoryItem) => void\n onJobResume: (job: JobHistoryItem) => void\n onCheckpointSelect: (checkpoint: CheckpointHistoryItem) => void\n onCheckpointResume: (checkpoint: CheckpointHistoryItem) => void\n onEventSelect: (state: BrowsingEventsState, event: EventHistoryItem) => void\n onBack: () => void\n onSwitchToExperts: () => void\n onSwitchToHistory: () => void\n}\nconst InputAreaContext = createContext<InputAreaContextValue | null>(null)\nexport const InputAreaProvider = InputAreaContext.Provider\nexport const useInputAreaContext = (): InputAreaContextValue => {\n const context = useContext(InputAreaContext)\n if (!context) {\n throw new Error(\"useInputAreaContext must be used within InputAreaProvider\")\n }\n return context\n}\n","export const truncateText = (text: string, maxLength: number): string => {\n if (text.length <= maxLength) return text\n return `${text.slice(0, maxLength)}...`\n}\nexport const assertNever = (x: never): never => {\n throw new Error(`Unexpected value: ${x}`)\n}\nexport const formatTimestamp = (timestamp: number): string => new Date(timestamp).toLocaleString()\nexport const shortenPath = (fullPath: string, maxLength = 60): string => {\n if (fullPath.length <= maxLength) return fullPath\n const parts = fullPath.split(\"/\")\n if (parts.length <= 2) return fullPath\n const filename = parts[parts.length - 1] ?? \"\"\n const parentDir = parts[parts.length - 2] ?? \"\"\n const shortened = `.../${parentDir}/${filename}`\n if (shortened.length <= maxLength) return shortened\n return `.../${filename}`\n}\nexport const summarizeOutput = (\n lines: string[],\n maxLines: number,\n): { visible: string[]; remaining: number } => {\n const filtered = lines.filter((l) => l.trim())\n const visible = filtered.slice(0, maxLines)\n const remaining = filtered.length - visible.length\n return { visible, remaining }\n}\n","import type { RunEvent } from \"@perstack/core\"\n\nexport const UI_CONSTANTS = {\n MAX_VISIBLE_LIST_ITEMS: 25,\n MAX_VISIBLE_EXPERTS_INLINE: 5,\n MAX_EVENTS: 1000,\n TRUNCATE_TEXT_SHORT: 40,\n TRUNCATE_TEXT_MEDIUM: 80,\n TRUNCATE_TEXT_DEFAULT: 100,\n TRUNCATE_TEXT_LONG: 200,\n} as const\n\nexport const RENDER_CONSTANTS = {\n EXEC_OUTPUT_MAX_LINES: 4,\n TODO_MAX_VISIBLE_ITEMS: 5,\n NEW_TODO_MAX_PREVIEW: 3,\n GLOB_MAX_FILES: 4,\n LIST_DIR_MAX_ITEMS: 4,\n} as const\n\nexport const INDICATOR = {\n CHEVRON_RIGHT: \">\",\n BULLET: \"●\",\n TREE: \"└\",\n ELLIPSIS: \"...\",\n} as const\n\nexport const STOP_EVENT_TYPES = [\n \"stopRunByInteractiveTool\",\n \"stopRunByDelegate\",\n \"stopRunByExceededMaxSteps\",\n] as const satisfies readonly RunEvent[\"type\"][]\n\nexport const KEY_BINDINGS = {\n NAVIGATE_UP: \"↑\",\n NAVIGATE_DOWN: \"↓\",\n SELECT: \"Enter\",\n BACK: \"b\",\n ESCAPE: \"Esc\",\n INPUT_MODE: \"i\",\n HISTORY: \"h\",\n NEW: \"n\",\n CHECKPOINTS: \"c\",\n EVENTS: \"e\",\n RESUME: \"Enter\",\n QUIT: \"q\",\n CTRL_QUIT: \"Ctrl+q\",\n} as const\n\nexport const KEY_HINTS = {\n NAVIGATE: `${KEY_BINDINGS.NAVIGATE_UP}${KEY_BINDINGS.NAVIGATE_DOWN}:Navigate`,\n SELECT: `${KEY_BINDINGS.SELECT}:Select`,\n RESUME: `${KEY_BINDINGS.RESUME}:Resume`,\n BACK: `${KEY_BINDINGS.BACK}:Back`,\n CANCEL: `${KEY_BINDINGS.ESCAPE}:Cancel`,\n INPUT: `${KEY_BINDINGS.INPUT_MODE}:Input`,\n HISTORY: `${KEY_BINDINGS.HISTORY}:History`,\n NEW: `${KEY_BINDINGS.NEW}:New Run`,\n CHECKPOINTS: `${KEY_BINDINGS.CHECKPOINTS}:Checkpoints`,\n EVENTS: `${KEY_BINDINGS.EVENTS}:Events`,\n ESC_BACK: `${KEY_BINDINGS.ESCAPE}:Back`,\n QUIT: `${KEY_BINDINGS.QUIT}:Quit`,\n CTRL_QUIT: `${KEY_BINDINGS.CTRL_QUIT}:Quit`,\n CONFIRM: `${KEY_BINDINGS.SELECT}:Confirm`,\n} as const\n","import { type MutableRefObject, useInsertionEffect, useRef } from \"react\"\n\nexport const useLatestRef = <T>(value: T): MutableRefObject<T> => {\n const ref = useRef(value)\n useInsertionEffect(() => {\n ref.current = value\n })\n return ref\n}\n","import type { Key } from \"ink\"\nimport { useCallback, useEffect, useState } from \"react\"\n\ntype UseListNavigationOptions<T> = {\n items: T[]\n onSelect?: (item: T) => void\n onBack?: () => void\n}\ntype UseListNavigationResult = {\n selectedIndex: number\n handleNavigation: (inputChar: string, key: Key) => boolean\n}\nexport const useListNavigation = <T>(\n options: UseListNavigationOptions<T>,\n): UseListNavigationResult => {\n const { items, onSelect, onBack } = options\n const [selectedIndex, setSelectedIndex] = useState(0)\n useEffect(() => {\n if (selectedIndex >= items.length && items.length > 0) {\n setSelectedIndex(items.length - 1)\n }\n }, [items.length, selectedIndex])\n const handleNavigation = useCallback(\n (inputChar: string, key: Key): boolean => {\n if (key.upArrow && items.length > 0) {\n setSelectedIndex((prev) => Math.max(0, prev - 1))\n return true\n }\n if (key.downArrow && items.length > 0) {\n setSelectedIndex((prev) => Math.min(items.length - 1, prev + 1))\n return true\n }\n if (key.return && items[selectedIndex]) {\n onSelect?.(items[selectedIndex])\n return true\n }\n if ((key.escape || inputChar === \"b\") && onBack) {\n onBack()\n return true\n }\n return false\n },\n [items, selectedIndex, onSelect, onBack],\n )\n return { selectedIndex, handleNavigation }\n}\n","import type { Key } from \"ink\"\nimport { useCallback, useState } from \"react\"\nimport { useLatestRef } from \"./use-latest-ref.js\"\n\ntype UseTextInputOptions = {\n onSubmit: (value: string) => void\n onCancel?: () => void\n}\nexport const useTextInput = (options: UseTextInputOptions) => {\n const [input, setInput] = useState(\"\")\n const inputRef = useLatestRef(input)\n const onSubmitRef = useLatestRef(options.onSubmit)\n const onCancelRef = useLatestRef(options.onCancel)\n const handleInput = useCallback(\n (inputChar: string, key: Key): void => {\n if (key.escape) {\n setInput(\"\")\n onCancelRef.current?.()\n return\n }\n if (key.return && inputRef.current.trim()) {\n onSubmitRef.current(inputRef.current.trim())\n setInput(\"\")\n return\n }\n if (key.backspace || key.delete) {\n setInput((prev) => prev.slice(0, -1))\n return\n }\n if (!key.ctrl && !key.meta && inputChar) {\n setInput((prev) => prev + inputChar)\n }\n },\n [inputRef, onSubmitRef, onCancelRef],\n )\n const reset = useCallback(() => {\n setInput(\"\")\n }, [])\n return { input, handleInput, reset }\n}\n","import { useListNavigation } from \"@perstack/tui-components\"\nimport type { Key } from \"ink\"\nimport { Box, Text, useInput } from \"ink\"\nimport type React from \"react\"\nimport { useMemo } from \"react\"\nimport { INDICATOR, UI_CONSTANTS } from \"../constants.js\"\n\ntype ListBrowserProps<T> = {\n title: string\n items: T[]\n renderItem: (item: T, isSelected: boolean, index: number) => React.ReactNode\n onSelect: (item: T) => void\n emptyMessage?: string\n extraKeyHandler?: (char: string, key: Key, selectedItem: T | undefined) => boolean\n onBack?: () => void\n maxItems?: number\n}\nexport const ListBrowser = <T,>({\n title,\n items,\n renderItem,\n onSelect,\n emptyMessage = \"No items found\",\n extraKeyHandler,\n onBack,\n maxItems = UI_CONSTANTS.MAX_VISIBLE_LIST_ITEMS,\n}: ListBrowserProps<T>) => {\n const { selectedIndex, handleNavigation } = useListNavigation({\n items,\n onSelect,\n onBack,\n })\n useInput((inputChar, key) => {\n if (extraKeyHandler?.(inputChar, key, items[selectedIndex])) return\n handleNavigation(inputChar, key)\n })\n const { scrollOffset, displayItems } = useMemo(() => {\n const offset = Math.max(0, Math.min(selectedIndex - maxItems + 1, items.length - maxItems))\n return {\n scrollOffset: offset,\n displayItems: items.slice(offset, offset + maxItems),\n }\n }, [items, selectedIndex, maxItems])\n const hasMoreAbove = scrollOffset > 0\n const hasMoreBelow = scrollOffset + maxItems < items.length\n return (\n <Box flexDirection=\"column\">\n <Box>\n <Text color=\"cyan\">{title}</Text>\n {items.length > maxItems && (\n <Text color=\"gray\">\n {\" \"}\n ({selectedIndex + 1}/{items.length})\n </Text>\n )}\n </Box>\n {hasMoreAbove && <Text color=\"gray\">{INDICATOR.ELLIPSIS}</Text>}\n <Box flexDirection=\"column\">\n {displayItems.length === 0 ? (\n <Text color=\"gray\">{emptyMessage}</Text>\n ) : (\n displayItems.map((item, index) => {\n const actualIndex = scrollOffset + index\n return renderItem(item, actualIndex === selectedIndex, actualIndex)\n })\n )}\n </Box>\n {hasMoreBelow && <Text color=\"gray\">{INDICATOR.ELLIPSIS}</Text>}\n </Box>\n )\n}\nexport type { ListBrowserProps }\n","import { Text } from \"ink\"\nimport { KEY_HINTS } from \"../../constants.js\"\nimport type { CheckpointHistoryItem, JobHistoryItem } from \"../../types/index.js\"\nimport { ListBrowser } from \"../list-browser.js\"\n\nexport type BrowsingCheckpointsInputProps = {\n job: JobHistoryItem\n checkpoints: CheckpointHistoryItem[]\n onCheckpointSelect: (checkpoint: CheckpointHistoryItem) => void\n onCheckpointResume: (checkpoint: CheckpointHistoryItem) => void\n onBack: () => void\n showEventsHint?: boolean\n}\nexport const BrowsingCheckpointsInput = ({\n job,\n checkpoints,\n onCheckpointSelect,\n onCheckpointResume,\n onBack,\n showEventsHint = true,\n}: BrowsingCheckpointsInputProps) => (\n <ListBrowser\n title={`Checkpoints for ${job.expertKey} ${KEY_HINTS.NAVIGATE} ${KEY_HINTS.RESUME} ${showEventsHint ? KEY_HINTS.EVENTS : \"\"} ${KEY_HINTS.BACK}`.trim()}\n items={checkpoints}\n onSelect={onCheckpointResume}\n onBack={onBack}\n emptyMessage=\"No checkpoints found\"\n extraKeyHandler={(char, _key, selected) => {\n if (char === \"e\" && selected) {\n onCheckpointSelect(selected)\n return true\n }\n return false\n }}\n renderItem={(cp, isSelected) => (\n <Text key={cp.id} color={isSelected ? \"cyan\" : \"gray\"}>\n {isSelected ? \">\" : \" \"} Step {cp.stepNumber} ({cp.id})\n </Text>\n )}\n />\n)\n","import { Box, Text, useInput } from \"ink\"\nimport { KEY_HINTS } from \"../../constants.js\"\nimport { formatTimestamp } from \"../../helpers.js\"\nimport type { EventHistoryItem } from \"../../types/index.js\"\n\nexport type BrowsingEventDetailInputProps = {\n event: EventHistoryItem\n onBack: () => void\n}\nexport const BrowsingEventDetailInput = ({ event, onBack }: BrowsingEventDetailInputProps) => {\n useInput((input, key) => {\n if (input === \"b\" || key.escape) {\n onBack()\n }\n })\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Box marginBottom={1}>\n <Text bold>Event Detail</Text>\n <Text dimColor> {KEY_HINTS.BACK}</Text>\n </Box>\n <Box flexDirection=\"column\" marginLeft={2}>\n <Text>\n <Text color=\"gray\">Type: </Text>\n <Text color=\"cyan\">{event.type}</Text>\n </Text>\n <Text>\n <Text color=\"gray\">Step: </Text>\n <Text>{event.stepNumber}</Text>\n </Text>\n <Text>\n <Text color=\"gray\">Timestamp: </Text>\n <Text>{formatTimestamp(event.timestamp)}</Text>\n </Text>\n <Text>\n <Text color=\"gray\">ID: </Text>\n <Text dimColor>{event.id}</Text>\n </Text>\n <Text>\n <Text color=\"gray\">Run ID: </Text>\n <Text dimColor>{event.runId}</Text>\n </Text>\n </Box>\n </Box>\n )\n}\n","import { Text } from \"ink\"\nimport { KEY_HINTS } from \"../../constants.js\"\nimport { formatTimestamp } from \"../../helpers.js\"\nimport type { CheckpointHistoryItem, EventHistoryItem } from \"../../types/index.js\"\nimport { ListBrowser } from \"../list-browser.js\"\n\nexport type BrowsingEventsInputProps = {\n checkpoint: CheckpointHistoryItem\n events: EventHistoryItem[]\n onEventSelect: (event: EventHistoryItem) => void\n onBack: () => void\n}\nexport const BrowsingEventsInput = ({\n checkpoint,\n events,\n onEventSelect,\n onBack,\n}: BrowsingEventsInputProps) => (\n <ListBrowser\n title={`Events for Step ${checkpoint.stepNumber} ${KEY_HINTS.NAVIGATE} ${KEY_HINTS.SELECT} ${KEY_HINTS.BACK}`}\n items={events}\n onSelect={onEventSelect}\n onBack={onBack}\n emptyMessage=\"No events found\"\n renderItem={(ev, isSelected) => (\n <Text key={ev.id} color={isSelected ? \"cyan\" : \"gray\"}>\n {isSelected ? \">\" : \" \"} [{ev.type}] Step {ev.stepNumber} ({formatTimestamp(ev.timestamp)})\n </Text>\n )}\n />\n)\n","import { useCallback, useState } from \"react\"\nimport { STOP_EVENT_TYPES } from \"../../constants.js\"\nimport type { InitialRuntimeConfig, PerstackEvent, RuntimeInfo } from \"../../types/index.js\"\n\ntype UseRuntimeInfoOptions = {\n initialExpertName?: string\n initialConfig: InitialRuntimeConfig\n}\nexport const useRuntimeInfo = (options: UseRuntimeInfoOptions) => {\n const [runtimeInfo, setRuntimeInfo] = useState<RuntimeInfo>({\n status: \"initializing\",\n runtimeVersion: options.initialConfig.runtimeVersion,\n expertName: options.initialExpertName,\n model: options.initialConfig.model,\n maxSteps: options.initialConfig.maxSteps,\n maxRetries: options.initialConfig.maxRetries,\n timeout: options.initialConfig.timeout,\n activeSkills: [],\n contextWindowUsage: options.initialConfig.contextWindowUsage,\n })\n const handleEvent = useCallback((event: PerstackEvent) => {\n if (event.type === \"initializeRuntime\") {\n setRuntimeInfo((prev) => ({\n runtimeVersion: event.runtimeVersion,\n expertName: event.expertName,\n model: event.model,\n maxSteps: event.maxSteps,\n maxRetries: event.maxRetries,\n timeout: event.timeout,\n currentStep: 1,\n status: \"running\",\n query: event.query,\n statusChangedAt: Date.now(),\n activeSkills: [],\n contextWindowUsage: prev.contextWindowUsage,\n }))\n return { initialized: true }\n }\n if (event.type === \"skillConnected\") {\n setRuntimeInfo((prev) => ({\n ...prev,\n activeSkills: [...prev.activeSkills, event.skillName],\n }))\n return null\n }\n if (event.type === \"skillDisconnected\") {\n setRuntimeInfo((prev) => ({\n ...prev,\n activeSkills: prev.activeSkills.filter((s) => s !== event.skillName),\n }))\n return null\n }\n if (\"stepNumber\" in event) {\n const isComplete = event.type === \"completeRun\"\n const isStopped = STOP_EVENT_TYPES.includes(event.type as (typeof STOP_EVENT_TYPES)[number])\n const checkpoint =\n \"nextCheckpoint\" in event\n ? event.nextCheckpoint\n : \"checkpoint\" in event\n ? event.checkpoint\n : undefined\n setRuntimeInfo((prev) => ({\n ...prev,\n currentStep: event.stepNumber,\n status: isComplete ? \"completed\" : isStopped ? \"stopped\" : \"running\",\n ...(isComplete || isStopped ? { statusChangedAt: Date.now() } : {}),\n ...(checkpoint?.contextWindowUsage !== undefined\n ? { contextWindowUsage: checkpoint.contextWindowUsage }\n : {}),\n }))\n if (isComplete) return { completed: true }\n if (isStopped) return { stopped: true }\n }\n return null\n }, [])\n const setExpertName = useCallback((expertName: string) => {\n setRuntimeInfo((prev) => ({ ...prev, expertName }))\n }, [])\n const setQuery = useCallback((query: string) => {\n setRuntimeInfo((prev) => ({ ...prev, query }))\n }, [])\n const setCurrentStep = useCallback((step: number) => {\n setRuntimeInfo((prev) => ({ ...prev, currentStep: step }))\n }, [])\n const setContextWindowUsage = useCallback((contextWindowUsage: number) => {\n setRuntimeInfo((prev) => ({ ...prev, contextWindowUsage }))\n }, [])\n return {\n runtimeInfo,\n handleEvent,\n setExpertName,\n setQuery,\n setCurrentStep,\n setContextWindowUsage,\n }\n}\n","import { useListNavigation, useTextInput } from \"@perstack/tui-components\"\nimport type { Key } from \"ink\"\nimport { useCallback, useState } from \"react\"\nimport type { ExpertOption } from \"../../types/index.js\"\n\ntype UseExpertSelectorOptions = {\n experts: ExpertOption[]\n onExpertSelect: (expertKey: string) => void\n extraKeyHandler?: (inputChar: string, key: Key) => boolean\n}\nexport const useExpertSelector = (options: UseExpertSelectorOptions) => {\n const { experts, onExpertSelect, extraKeyHandler } = options\n const [inputMode, setInputMode] = useState(false)\n const { selectedIndex, handleNavigation } = useListNavigation({\n items: experts,\n onSelect: (expert) => onExpertSelect(expert.key),\n })\n const { input, handleInput, reset } = useTextInput({\n onSubmit: (value) => {\n onExpertSelect(value)\n setInputMode(false)\n },\n onCancel: () => setInputMode(false),\n })\n const handleKeyInput = useCallback(\n (inputChar: string, key: Key) => {\n if (inputMode) {\n handleInput(inputChar, key)\n return\n }\n if (handleNavigation(inputChar, key)) return\n if (extraKeyHandler?.(inputChar, key)) return\n if (inputChar === \"i\") {\n reset()\n setInputMode(true)\n }\n },\n [inputMode, handleInput, handleNavigation, extraKeyHandler, reset],\n )\n return {\n inputMode,\n input,\n selectedIndex,\n handleKeyInput,\n }\n}\n","import { Box, Text } from \"ink\"\nimport type { ExpertOption } from \"../types/index.js\"\n\nexport type ExpertListProps = {\n experts: ExpertOption[]\n selectedIndex: number\n showSource?: boolean\n inline?: boolean\n maxItems?: number\n}\nexport const ExpertList = ({\n experts,\n selectedIndex,\n showSource = false,\n inline = false,\n maxItems,\n}: ExpertListProps) => {\n const displayExperts = maxItems ? experts.slice(0, maxItems) : experts\n if (displayExperts.length === 0) {\n return <Text color=\"gray\">No experts found.</Text>\n }\n const items = displayExperts.map((expert, index) => (\n <Text key={expert.key} color={index === selectedIndex ? \"cyan\" : \"gray\"}>\n {index === selectedIndex ? \">\" : \" \"} {showSource ? expert.key : expert.name}\n {showSource && expert.source && (\n <>\n {\" \"}\n <Text color={expert.source === \"configured\" ? \"green\" : \"yellow\"}>\n [{expert.source === \"configured\" ? \"config\" : \"recent\"}]\n </Text>\n </>\n )}\n {inline ? \" \" : \"\"}\n </Text>\n ))\n return inline ? <Box>{items}</Box> : <Box flexDirection=\"column\">{items}</Box>\n}\n","import type { Key } from \"ink\"\nimport { Box, Text, useInput } from \"ink\"\nimport { UI_CONSTANTS } from \"../constants.js\"\nimport { useExpertSelector } from \"../hooks/index.js\"\nimport type { ExpertOption } from \"../types/index.js\"\nimport { ExpertList } from \"./expert-list.js\"\n\nexport type ExpertSelectorBaseProps = {\n experts: ExpertOption[]\n hint: string\n onExpertSelect: (expertKey: string) => void\n showSource?: boolean\n inline?: boolean\n maxItems?: number\n extraKeyHandler?: (inputChar: string, key: Key) => boolean\n}\nexport const ExpertSelectorBase = ({\n experts,\n hint,\n onExpertSelect,\n showSource = false,\n inline = false,\n maxItems = UI_CONSTANTS.MAX_VISIBLE_LIST_ITEMS,\n extraKeyHandler,\n}: ExpertSelectorBaseProps) => {\n const { inputMode, input, selectedIndex, handleKeyInput } = useExpertSelector({\n experts,\n onExpertSelect,\n extraKeyHandler,\n })\n useInput(handleKeyInput)\n return (\n <Box flexDirection={inline ? \"row\" : \"column\"}>\n {!inputMode && (\n <Box flexDirection=\"column\">\n <Box>\n <Text color=\"cyan\">{hint}</Text>\n </Box>\n <ExpertList\n experts={experts}\n selectedIndex={selectedIndex}\n showSource={showSource}\n inline={inline}\n maxItems={maxItems}\n />\n </Box>\n )}\n {inputMode && (\n <Box>\n <Text color=\"gray\">Expert: </Text>\n <Text color=\"white\">{input}</Text>\n <Text color=\"cyan\">_</Text>\n </Box>\n )}\n </Box>\n )\n}\n","import { useCallback } from \"react\"\nimport { KEY_HINTS, UI_CONSTANTS } from \"../../constants.js\"\nimport type { ExpertOption } from \"../../types/index.js\"\nimport { ExpertSelectorBase } from \"../expert-selector-base.js\"\n\nexport type BrowsingExpertsInputProps = {\n experts: ExpertOption[]\n onExpertSelect: (expertKey: string) => void\n onSwitchToHistory: () => void\n}\nexport const BrowsingExpertsInput = ({\n experts,\n onExpertSelect,\n onSwitchToHistory,\n}: BrowsingExpertsInputProps) => {\n const extraKeyHandler = useCallback(\n (inputChar: string) => {\n if (inputChar === \"h\") {\n onSwitchToHistory()\n return true\n }\n return false\n },\n [onSwitchToHistory],\n )\n const hint = `Experts ${KEY_HINTS.NAVIGATE} ${KEY_HINTS.SELECT} ${KEY_HINTS.INPUT} ${KEY_HINTS.HISTORY} ${KEY_HINTS.CANCEL}`\n return (\n <ExpertSelectorBase\n experts={experts}\n hint={hint}\n onExpertSelect={onExpertSelect}\n showSource\n maxItems={UI_CONSTANTS.MAX_VISIBLE_LIST_ITEMS}\n extraKeyHandler={extraKeyHandler}\n />\n )\n}\n","import { Text } from \"ink\"\nimport { KEY_HINTS } from \"../../constants.js\"\nimport { formatTimestamp } from \"../../helpers.js\"\nimport type { JobHistoryItem } from \"../../types/index.js\"\nimport { ListBrowser } from \"../list-browser.js\"\n\nexport type BrowsingHistoryInputProps = {\n jobs: JobHistoryItem[]\n onJobSelect: (job: JobHistoryItem) => void\n onJobResume: (job: JobHistoryItem) => void\n onSwitchToExperts: () => void\n}\nexport const BrowsingHistoryInput = ({\n jobs,\n onJobSelect,\n onJobResume,\n onSwitchToExperts,\n}: BrowsingHistoryInputProps) => (\n <ListBrowser\n title={`Job History ${KEY_HINTS.NAVIGATE} ${KEY_HINTS.RESUME} ${KEY_HINTS.CHECKPOINTS} ${KEY_HINTS.NEW}`}\n items={jobs}\n onSelect={onJobResume}\n emptyMessage=\"No jobs found. Press n to start a new job.\"\n extraKeyHandler={(char, _key, selected) => {\n if (char === \"c\" && selected) {\n onJobSelect(selected)\n return true\n }\n if (char === \"n\") {\n onSwitchToExperts()\n return true\n }\n return false\n }}\n renderItem={(job, isSelected) => (\n <Text key={job.jobId} color={isSelected ? \"cyan\" : \"gray\"}>\n {isSelected ? \">\" : \" \"} {job.expertKey} - {job.totalSteps} steps ({job.jobId}) (\n {formatTimestamp(job.startedAt)})\n </Text>\n )}\n />\n)\n","import { useCallback } from \"react\"\nimport { useInputAreaContext } from \"../context/index.js\"\nimport { assertNever } from \"../helpers.js\"\nimport type { EventHistoryItem, InputState } from \"../types/index.js\"\nimport {\n BrowsingCheckpointsInput,\n BrowsingEventDetailInput,\n BrowsingEventsInput,\n BrowsingExpertsInput,\n BrowsingHistoryInput,\n} from \"./input-areas/index.js\"\n\ntype BrowsingState = Exclude<InputState, { type: \"enteringQuery\" } | { type: \"running\" }>\ntype BrowserRouterProps = {\n inputState: BrowsingState\n showEventsHint?: boolean\n}\nexport const BrowserRouter = ({ inputState, showEventsHint = true }: BrowserRouterProps) => {\n const ctx = useInputAreaContext()\n const handleEventSelect = useCallback(\n (event: EventHistoryItem) => {\n if (inputState.type === \"browsingEvents\") {\n ctx.onEventSelect(inputState, event)\n }\n },\n [ctx.onEventSelect, inputState],\n )\n switch (inputState.type) {\n case \"browsingHistory\":\n return (\n <BrowsingHistoryInput\n jobs={inputState.jobs}\n onJobSelect={ctx.onJobSelect}\n onJobResume={ctx.onJobResume}\n onSwitchToExperts={ctx.onSwitchToExperts}\n />\n )\n case \"browsingExperts\":\n return (\n <BrowsingExpertsInput\n experts={inputState.experts}\n onExpertSelect={ctx.onExpertSelect}\n onSwitchToHistory={ctx.onSwitchToHistory}\n />\n )\n case \"browsingCheckpoints\":\n return (\n <BrowsingCheckpointsInput\n job={inputState.job}\n checkpoints={inputState.checkpoints}\n onCheckpointSelect={ctx.onCheckpointSelect}\n onCheckpointResume={ctx.onCheckpointResume}\n onBack={ctx.onBack}\n showEventsHint={showEventsHint}\n />\n )\n case \"browsingEvents\":\n return (\n <BrowsingEventsInput\n checkpoint={inputState.checkpoint}\n events={inputState.events}\n onEventSelect={handleEventSelect}\n onBack={ctx.onBack}\n />\n )\n case \"browsingEventDetail\":\n return <BrowsingEventDetailInput event={inputState.selectedEvent} onBack={ctx.onBack} />\n default:\n return assertNever(inputState)\n }\n}\n","import { Box, Text } from \"ink\"\nimport type React from \"react\"\nimport { INDICATOR } from \"../constants.js\"\nexport type StatusColor = \"green\" | \"red\" | \"yellow\" | \"white\" | \"gray\" | \"cyan\" | \"blue\"\n\ntype ActionRowSimpleProps = {\n indicatorColor: StatusColor\n text: string\n textDimColor?: boolean\n}\nexport const ActionRowSimple = ({\n indicatorColor,\n text,\n textDimColor = false,\n}: ActionRowSimpleProps) => (\n <Box flexDirection=\"column\">\n <Box flexDirection=\"row\">\n <Box paddingRight={1}>\n <Text color={indicatorColor}>{INDICATOR.BULLET}</Text>\n </Box>\n <Text color=\"white\" dimColor={textDimColor}>\n {text}\n </Text>\n </Box>\n </Box>\n)\n\ntype ActionRowProps = {\n indicatorColor: StatusColor\n label: string\n summary?: string\n children: React.ReactNode\n}\nexport const ActionRow = ({ indicatorColor, label, summary, children }: ActionRowProps) => (\n <Box flexDirection=\"column\">\n <Box flexDirection=\"row\" gap={1}>\n <Text color={indicatorColor}>{INDICATOR.BULLET}</Text>\n <Text color=\"white\">{label}</Text>\n {summary && (\n <Text color=\"white\" dimColor>\n {summary}\n </Text>\n )}\n </Box>\n <Box flexDirection=\"row\">\n <Box paddingRight={1}>\n <Text dimColor>{INDICATOR.TREE}</Text>\n </Box>\n {children}\n </Box>\n </Box>\n)\n","import type { Activity, ActivityOrGroup, ParallelActivitiesGroup } from \"@perstack/core\"\nimport { Box, Text } from \"ink\"\nimport type React from \"react\"\nimport { RENDER_CONSTANTS, UI_CONSTANTS } from \"../constants.js\"\nimport { shortenPath, summarizeOutput, truncateText } from \"../helpers.js\"\nimport { ActionRow, ActionRowSimple, type StatusColor } from \"./action-row.js\"\n\ntype CheckpointActionRowProps = {\n action: ActivityOrGroup\n}\n\nexport const CheckpointActionRow = ({ action }: CheckpointActionRowProps): React.ReactNode => {\n // Handle ParallelActivitiesGroup\n if (action.type === \"parallelGroup\") {\n return renderParallelGroup(action)\n }\n\n const actionElement = renderAction(action)\n if (!actionElement) return null\n\n return (\n <Box flexDirection=\"column\">\n {action.reasoning && renderReasoning(action.reasoning)}\n {actionElement}\n </Box>\n )\n}\n\nfunction renderParallelGroup(group: ParallelActivitiesGroup): React.ReactNode {\n return (\n <Box flexDirection=\"column\">\n {group.reasoning && renderReasoning(group.reasoning)}\n {group.activities.map((activity, index) => {\n const actionElement = renderAction(activity)\n if (!actionElement) return null\n return (\n <Box key={activity.id || `${activity.type}-${index}`} flexDirection=\"column\">\n {actionElement}\n </Box>\n )\n })}\n </Box>\n )\n}\n\nfunction renderReasoning(text: string): React.ReactNode {\n const lines = text.split(\"\\n\")\n return (\n <ActionRow indicatorColor=\"white\" label=\"Reasoning\">\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Text key={`reasoning-${idx}`} dimColor wrap=\"wrap\">\n {line}\n </Text>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderAction(action: Activity): React.ReactNode {\n const color: StatusColor =\n action.type === \"error\" || (\"error\" in action && action.error) ? \"red\" : \"green\"\n\n switch (action.type) {\n case \"query\":\n return renderQuery(action.text, action.runId)\n\n case \"retry\":\n return (\n <ActionRow indicatorColor=\"yellow\" label=\"Retry\">\n <Text dimColor>{action.message || action.error}</Text>\n </ActionRow>\n )\n\n case \"complete\":\n return (\n <ActionRow indicatorColor=\"green\" label=\"Run Results\">\n <Text>{action.text}</Text>\n </ActionRow>\n )\n\n case \"attemptCompletion\": {\n // Show status of completion attempt\n if (action.error) {\n return (\n <ActionRow indicatorColor=\"red\" label=\"Completion Failed\">\n <Text color=\"red\">{action.error}</Text>\n </ActionRow>\n )\n }\n const remaining = action.remainingTodos?.filter((t) => !t.completed) ?? []\n if (remaining.length > 0) {\n return (\n <ActionRow indicatorColor=\"yellow\" label=\"Completion Blocked\">\n <Text dimColor>\n {remaining.length} remaining task{remaining.length > 1 ? \"s\" : \"\"}\n </Text>\n </ActionRow>\n )\n }\n return <ActionRowSimple indicatorColor=\"green\" text=\"Completion Accepted\" />\n }\n\n case \"todo\":\n return renderTodo(action, color)\n\n case \"clearTodo\":\n return <ActionRowSimple indicatorColor={color} text=\"Todo Cleared\" />\n\n case \"readTextFile\":\n return renderReadTextFile(action, color)\n\n case \"writeTextFile\":\n return renderWriteTextFile(action, color)\n\n case \"editTextFile\":\n return renderEditTextFile(action, color)\n\n case \"appendTextFile\":\n return renderAppendTextFile(action, color)\n\n case \"deleteFile\":\n return (\n <ActionRow indicatorColor={color} label=\"Delete\" summary={shortenPath(action.path)}>\n <Text dimColor>Removed</Text>\n </ActionRow>\n )\n\n case \"deleteDirectory\":\n return (\n <ActionRow indicatorColor={color} label=\"Delete Dir\" summary={shortenPath(action.path)}>\n <Text dimColor>Removed{action.recursive ? \" (recursive)\" : \"\"}</Text>\n </ActionRow>\n )\n\n case \"moveFile\":\n return (\n <ActionRow indicatorColor={color} label=\"Move\" summary={shortenPath(action.source)}>\n <Text dimColor>→ {shortenPath(action.destination, 30)}</Text>\n </ActionRow>\n )\n\n case \"createDirectory\":\n return (\n <ActionRow indicatorColor={color} label=\"Mkdir\" summary={shortenPath(action.path)}>\n <Text dimColor>Created</Text>\n </ActionRow>\n )\n\n case \"listDirectory\":\n return renderListDirectory(action, color)\n\n case \"getFileInfo\":\n return (\n <ActionRow indicatorColor={color} label=\"Info\" summary={shortenPath(action.path)}>\n <Text dimColor>Fetched</Text>\n </ActionRow>\n )\n\n case \"readPdfFile\":\n return (\n <ActionRow indicatorColor={color} label=\"PDF\" summary={shortenPath(action.path)}>\n <Text dimColor>Read</Text>\n </ActionRow>\n )\n\n case \"readImageFile\":\n return (\n <ActionRow indicatorColor={color} label=\"Image\" summary={shortenPath(action.path)}>\n <Text dimColor>Read</Text>\n </ActionRow>\n )\n\n case \"exec\":\n return renderExec(action, color)\n\n case \"delegate\":\n return (\n <ActionRow indicatorColor=\"yellow\" label={action.delegateExpertKey}>\n <Text\n dimColor\n >{`{\"query\":\"${truncateText(action.query, UI_CONSTANTS.TRUNCATE_TEXT_MEDIUM)}\"}`}</Text>\n </ActionRow>\n )\n\n case \"delegationComplete\":\n return (\n <ActionRowSimple\n indicatorColor=\"green\"\n text={`Delegation Complete (${action.count} delegate${action.count > 1 ? \"s\" : \"\"} returned)`}\n />\n )\n\n case \"interactiveTool\":\n return (\n <ActionRow indicatorColor=\"yellow\" label={`Interactive: ${action.toolName}`}>\n <Text dimColor>\n {truncateText(JSON.stringify(action.args), UI_CONSTANTS.TRUNCATE_TEXT_MEDIUM)}\n </Text>\n </ActionRow>\n )\n\n case \"generalTool\":\n return (\n <ActionRow indicatorColor={color} label={action.toolName}>\n <Text dimColor>\n {truncateText(JSON.stringify(action.args), UI_CONSTANTS.TRUNCATE_TEXT_MEDIUM)}\n </Text>\n </ActionRow>\n )\n\n case \"error\":\n return (\n <ActionRow indicatorColor=\"red\" label={action.errorName ?? \"Error\"}>\n <Text color=\"red\">{action.error ?? \"Unknown error\"}</Text>\n </ActionRow>\n )\n\n default: {\n // Exhaustive check - if we get here, we missed a case\n const _exhaustive: never = action\n return null\n }\n }\n}\n\nfunction renderTodo(\n action: Extract<Activity, { type: \"todo\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { newTodos, completedTodos, todos } = action\n\n const hasNewTodos = newTodos && newTodos.length > 0\n const hasCompletedTodos = completedTodos && completedTodos.length > 0\n\n if (!hasNewTodos && !hasCompletedTodos) {\n return <ActionRowSimple indicatorColor={color} text=\"Todo No changes\" />\n }\n\n // Build label parts\n const labelParts: string[] = []\n if (hasNewTodos) {\n labelParts.push(`Added ${newTodos.length} task${newTodos.length > 1 ? \"s\" : \"\"}`)\n }\n if (hasCompletedTodos) {\n labelParts.push(\n `Completed ${completedTodos.length} task${completedTodos.length > 1 ? \"s\" : \"\"}`,\n )\n }\n const label = `Todo ${labelParts.join(\", \")}`\n\n // Get completed titles for display\n const completedTitles = hasCompletedTodos\n ? completedTodos\n .map((id) => todos.find((t) => t.id === id)?.title)\n .filter((t): t is string => t !== undefined)\n : []\n\n // If no content to show in body, use simple row\n if (!hasNewTodos && completedTitles.length === 0) {\n return <ActionRowSimple indicatorColor={color} text={label} />\n }\n\n return (\n <ActionRow indicatorColor={color} label={label}>\n <Box flexDirection=\"column\">\n {hasNewTodos &&\n newTodos.slice(0, RENDER_CONSTANTS.NEW_TODO_MAX_PREVIEW).map((todo, idx) => (\n <Text key={`todo-${idx}`} dimColor>\n ○ {todo}\n </Text>\n ))}\n {hasNewTodos && newTodos.length > RENDER_CONSTANTS.NEW_TODO_MAX_PREVIEW && (\n <Text dimColor>... +{newTodos.length - RENDER_CONSTANTS.NEW_TODO_MAX_PREVIEW} more</Text>\n )}\n {completedTitles.slice(0, RENDER_CONSTANTS.NEW_TODO_MAX_PREVIEW).map((title, idx) => (\n <Text key={`completed-${idx}`} dimColor>\n ✓ {title}\n </Text>\n ))}\n {completedTitles.length > RENDER_CONSTANTS.NEW_TODO_MAX_PREVIEW && (\n <Text dimColor>\n ... +{completedTitles.length - RENDER_CONSTANTS.NEW_TODO_MAX_PREVIEW} more\n </Text>\n )}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderReadTextFile(\n action: Extract<Activity, { type: \"readTextFile\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { path, content, from, to } = action\n const lineRange = from !== undefined && to !== undefined ? `#${from}-${to}` : \"\"\n const lines = content?.split(\"\\n\") ?? []\n return (\n <ActionRow\n indicatorColor={color}\n label=\"Read Text File\"\n summary={`${shortenPath(path)}${lineRange}`}\n >\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Box flexDirection=\"row\" key={`read-${idx}`} gap={1}>\n <Text color=\"white\" dimColor>\n {line}\n </Text>\n </Box>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderWriteTextFile(\n action: Extract<Activity, { type: \"writeTextFile\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { path, text } = action\n const lines = text.split(\"\\n\")\n return (\n <ActionRow indicatorColor={color} label=\"Write Text File\" summary={shortenPath(path)}>\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Box flexDirection=\"row\" key={`write-${idx}`} gap={1}>\n <Text color=\"green\" dimColor>\n +\n </Text>\n <Text color=\"white\" dimColor>\n {line}\n </Text>\n </Box>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderEditTextFile(\n action: Extract<Activity, { type: \"editTextFile\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { path, oldText, newText } = action\n const oldLines = oldText.split(\"\\n\")\n const newLines = newText.split(\"\\n\")\n return (\n <ActionRow indicatorColor={color} label=\"Edit Text File\" summary={shortenPath(path)}>\n <Box flexDirection=\"column\">\n {oldLines.map((line, idx) => (\n <Box flexDirection=\"row\" key={`old-${idx}`} gap={1}>\n <Text color=\"red\" dimColor>\n -\n </Text>\n <Text color=\"white\" dimColor>\n {line}\n </Text>\n </Box>\n ))}\n {newLines.map((line, idx) => (\n <Box flexDirection=\"row\" key={`new-${idx}`} gap={1}>\n <Text color=\"green\" dimColor>\n +\n </Text>\n <Text dimColor>{line}</Text>\n </Box>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderAppendTextFile(\n action: Extract<Activity, { type: \"appendTextFile\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { path, text } = action\n const lines = text.split(\"\\n\")\n return (\n <ActionRow indicatorColor={color} label=\"Append Text File\" summary={shortenPath(path)}>\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Box flexDirection=\"row\" key={`append-${idx}`} gap={1}>\n <Text color=\"green\" dimColor>\n +\n </Text>\n <Text color=\"white\" dimColor>\n {line}\n </Text>\n </Box>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderListDirectory(\n action: Extract<Activity, { type: \"listDirectory\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { path, items } = action\n const itemLines =\n items?.map((item) => `${item.type === \"directory\" ? \"📁\" : \"📄\"} ${item.name}`) ?? []\n const { visible, remaining } = summarizeOutput(itemLines, RENDER_CONSTANTS.LIST_DIR_MAX_ITEMS)\n return (\n <ActionRow indicatorColor={color} label=\"List\" summary={shortenPath(path)}>\n <Box flexDirection=\"column\">\n {visible.map((line, idx) => (\n <Text key={`dir-${idx}`} dimColor>\n {truncateText(line, UI_CONSTANTS.TRUNCATE_TEXT_DEFAULT)}\n </Text>\n ))}\n {remaining > 0 && <Text dimColor>... +{remaining} more</Text>}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderExec(\n action: Extract<Activity, { type: \"exec\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { command, args, cwd, output } = action\n const cwdPart = cwd ? ` ${shortenPath(cwd, 40)}` : \"\"\n const cmdLine = truncateText(\n `${command} ${args.join(\" \")}${cwdPart}`,\n UI_CONSTANTS.TRUNCATE_TEXT_DEFAULT,\n )\n const outputLines = output?.split(\"\\n\") ?? []\n const { visible, remaining } = summarizeOutput(\n outputLines,\n RENDER_CONSTANTS.EXEC_OUTPUT_MAX_LINES,\n )\n return (\n <ActionRow indicatorColor={color} label={`Bash ${cmdLine}`}>\n <Box flexDirection=\"column\">\n {visible.map((line, idx) => (\n <Text key={`out-${idx}`} dimColor>\n {truncateText(line, UI_CONSTANTS.TRUNCATE_TEXT_DEFAULT)}\n </Text>\n ))}\n {remaining > 0 && <Text dimColor>... +{remaining} more</Text>}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderQuery(text: string, runId: string): React.ReactNode {\n const lines = text.split(\"\\n\")\n // Show abbreviated runId (first 8 chars) to help identify different runs\n const shortRunId = runId.slice(0, 8)\n return (\n <ActionRow indicatorColor=\"cyan\" label=\"Query\" summary={`(${shortRunId})`}>\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Text key={`query-${idx}`} dimColor wrap=\"wrap\">\n {line}\n </Text>\n ))}\n </Box>\n </ActionRow>\n )\n}\n","import { useTextInput } from \"@perstack/tui-components\"\nimport { Box, Text, useInput } from \"ink\"\nimport type { RuntimeInfo } from \"../types/index.js\"\nexport type RunSettingProps = {\n info: RuntimeInfo\n eventCount: number\n isEditing: boolean\n expertName?: string\n onQuerySubmit?: (query: string) => void\n}\nexport const RunSetting = ({\n info,\n eventCount,\n isEditing,\n expertName,\n onQuerySubmit,\n}: RunSettingProps) => {\n const { input, handleInput } = useTextInput({\n onSubmit: onQuerySubmit ?? (() => {}),\n })\n useInput(handleInput, { isActive: isEditing })\n const displayExpertName = expertName ?? info.expertName\n const skills = info.activeSkills.length > 0 ? info.activeSkills.join(\", \") : \"\"\n const step = info.currentStep !== undefined ? String(info.currentStep) : \"\"\n const usagePercent = (info.contextWindowUsage * 100).toFixed(1)\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor=\"gray\"\n borderTop={true}\n borderBottom={false}\n borderLeft={false}\n borderRight={false}\n >\n <Text>\n <Text bold color=\"cyan\">\n Perstack\n </Text>\n {info.runtimeVersion && <Text color=\"gray\"> (v{info.runtimeVersion})</Text>}\n </Text>\n <Text>\n <Text color=\"gray\">Expert: </Text>\n <Text color=\"white\">{displayExpertName}</Text>\n <Text color=\"gray\"> / Skills: </Text>\n <Text color=\"green\">{skills}</Text>\n </Text>\n <Text>\n <Text color=\"gray\">Status: </Text>\n <Text\n color={\n info.status === \"running\" ? \"green\" : info.status === \"completed\" ? \"cyan\" : \"yellow\"\n }\n >\n {info.status}\n </Text>\n <Text color=\"gray\"> / Step: </Text>\n <Text color=\"white\">{step}</Text>\n <Text color=\"gray\"> / Events: </Text>\n <Text color=\"white\">{eventCount}</Text>\n <Text color=\"gray\"> / Usage: </Text>\n <Text color=\"white\">{usagePercent}%</Text>\n </Text>\n <Text>\n <Text color=\"gray\">Model: </Text>\n <Text color=\"white\">{info.model}</Text>\n </Text>\n <Box>\n <Text color=\"gray\">Query: </Text>\n {isEditing ? (\n <>\n <Text color=\"white\">{input}</Text>\n <Text color=\"cyan\">_</Text>\n </>\n ) : (\n <Text color=\"white\">{info.query}</Text>\n )}\n </Box>\n </Box>\n )\n}\n","import { Box, Text } from \"ink\"\nimport type React from \"react\"\nimport type { PerRunStreamingState, StreamingState } from \"../types/index.js\"\nimport { ActionRow } from \"./action-row.js\"\n\ntype StreamingDisplayProps = {\n streaming: StreamingState\n}\n\n/**\n * Renders currently active streaming content.\n * This component is sandwiched between <Static> logs and input fields.\n * Content is only shown while actively streaming, and moves to <Static>\n * logs once complete.\n *\n * Streaming content is organized by run ID to support parallel execution.\n * Each run's streaming content is displayed in a separate section with\n * the expert key as a label.\n */\nexport const StreamingDisplay = ({ streaming }: StreamingDisplayProps): React.ReactNode => {\n const activeRuns = Object.entries(streaming.runs).filter(\n ([, run]) => run.isReasoningActive || run.isRunResultActive,\n )\n\n if (activeRuns.length === 0) return null\n\n return (\n <Box flexDirection=\"column\" marginY={1}>\n {activeRuns.map(([runId, run]) => (\n <StreamingRunSection key={runId} run={run} />\n ))}\n </Box>\n )\n}\n\nfunction StreamingRunSection({ run }: { run: PerRunStreamingState }): React.ReactNode {\n return (\n <Box flexDirection=\"column\">\n {run.isReasoningActive && run.reasoning !== undefined && (\n <StreamingReasoning expertKey={run.expertKey} text={run.reasoning} />\n )}\n {run.isRunResultActive && run.runResult !== undefined && (\n <StreamingRunResult expertKey={run.expertKey} text={run.runResult} />\n )}\n </Box>\n )\n}\n\nfunction StreamingReasoning({\n expertKey,\n text,\n}: {\n expertKey: string\n text: string\n}): React.ReactNode {\n const lines = text.split(\"\\n\")\n const label = `[${formatExpertKey(expertKey)}] Reasoning...`\n return (\n <ActionRow indicatorColor=\"cyan\" label={label}>\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Text key={`streaming-reasoning-${idx}`} dimColor wrap=\"wrap\">\n {line}\n </Text>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction StreamingRunResult({\n expertKey,\n text,\n}: {\n expertKey: string\n text: string\n}): React.ReactNode {\n const lines = text.split(\"\\n\")\n const label = `[${formatExpertKey(expertKey)}] Generating...`\n return (\n <ActionRow indicatorColor=\"green\" label={label}>\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Text key={`streaming-run-result-${idx}`} wrap=\"wrap\">\n {line}\n </Text>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction formatExpertKey(expertKey: string): string {\n const atIndex = expertKey.lastIndexOf(\"@\")\n if (atIndex > 0) {\n return expertKey.substring(0, atIndex)\n }\n return expertKey\n}\n","import type { Activity, ActivityOrGroup, ParallelActivitiesGroup } from \"@perstack/core\"\nimport { Box, Text } from \"ink\"\nimport type React from \"react\"\nimport { useMemo } from \"react\"\nimport { CheckpointActionRow } from \"../../components/index.js\"\n\ntype RunNode = {\n runId: string\n expertKey: string\n activities: ActivityOrGroup[]\n children: RunNode[]\n}\n\ntype ActivityLogPanelProps = {\n activities: ActivityOrGroup[]\n}\n\nfunction getActivityKey(activityOrGroup: ActivityOrGroup, index: number): string {\n return activityOrGroup.id || `activity-${index}`\n}\n\nconst RunBox = ({ node, isRoot }: { node: RunNode; isRoot: boolean }): React.ReactNode => {\n if (isRoot) {\n return (\n <Box flexDirection=\"column\">\n {node.activities.map((activity, index) => (\n <CheckpointActionRow key={getActivityKey(activity, index)} action={activity} />\n ))}\n {node.children.map((child) => (\n <RunBox key={child.runId} node={child} isRoot={false} />\n ))}\n </Box>\n )\n }\n\n // Show abbreviated runId (first 8 chars) to help identify different runs\n const shortRunId = node.runId.slice(0, 8)\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"gray\" marginLeft={1}>\n <Text dimColor bold>\n [{node.expertKey}] <Text dimColor>({shortRunId})</Text>\n </Text>\n {node.activities.map((activity, index) => (\n <CheckpointActionRow key={getActivityKey(activity, index)} action={activity} />\n ))}\n {node.children.map((child) => (\n <RunBox key={child.runId} node={child} isRoot={false} />\n ))}\n </Box>\n )\n}\n\n/**\n * Extract base activity properties from ActivityOrGroup.\n * For ParallelActivitiesGroup, uses the group's properties.\n * For Activity, uses the activity's properties directly.\n */\nfunction getActivityProps(\n activityOrGroup: ActivityOrGroup,\n): Pick<Activity, \"runId\" | \"expertKey\" | \"delegatedBy\"> {\n if (activityOrGroup.type === \"parallelGroup\") {\n const group = activityOrGroup as ParallelActivitiesGroup\n // For groups, check the first activity for delegatedBy info\n const firstActivity = group.activities[0]\n return {\n runId: group.runId,\n expertKey: group.expertKey,\n delegatedBy: firstActivity?.delegatedBy,\n }\n }\n return activityOrGroup\n}\n\nexport const ActivityLogPanel = ({ activities }: ActivityLogPanelProps): React.ReactNode => {\n const rootNodes = useMemo(() => {\n const nodeMap = new Map<string, RunNode>()\n const roots: RunNode[] = []\n // Track orphan nodes that need parent lookup (parentRunId -> childNode[])\n const orphanChildren = new Map<string, RunNode[]>()\n\n for (const activityOrGroup of activities) {\n const { runId, expertKey, delegatedBy } = getActivityProps(activityOrGroup)\n\n let node = nodeMap.get(runId)\n if (!node) {\n node = {\n runId,\n expertKey,\n activities: [],\n children: [],\n }\n nodeMap.set(runId, node)\n\n // Check if any orphan children were waiting for this node\n const waitingChildren = orphanChildren.get(runId)\n if (waitingChildren) {\n for (const child of waitingChildren) {\n node.children.push(child)\n // Remove from roots if it was added there\n const rootIndex = roots.indexOf(child)\n if (rootIndex !== -1) {\n roots.splice(rootIndex, 1)\n }\n }\n orphanChildren.delete(runId)\n }\n\n if (delegatedBy) {\n const parentNode = nodeMap.get(delegatedBy.runId)\n if (parentNode) {\n parentNode.children.push(node)\n } else {\n // Parent doesn't exist yet - track as orphan and add to roots temporarily\n const orphans = orphanChildren.get(delegatedBy.runId) ?? []\n orphans.push(node)\n orphanChildren.set(delegatedBy.runId, orphans)\n roots.push(node)\n }\n } else {\n roots.push(node)\n }\n }\n node.activities.push(activityOrGroup)\n }\n\n return roots\n }, [activities])\n\n return (\n <Box flexDirection=\"column\">\n {rootNodes.map((node) => (\n <RunBox key={node.runId} node={node} isRoot={true} />\n ))}\n </Box>\n )\n}\n","import { useTextInput } from \"@perstack/tui-components\"\nimport { Box, Text, useInput } from \"ink\"\nimport type React from \"react\"\nimport type { RunStatus } from \"../hooks/index.js\"\n\ntype ContinueInputPanelProps = {\n isActive: boolean\n runStatus: RunStatus\n onSubmit: (query: string) => void\n}\n\nexport const ContinueInputPanel = ({\n isActive,\n runStatus,\n onSubmit,\n}: ContinueInputPanelProps): React.ReactNode => {\n const { input, handleInput } = useTextInput({\n onSubmit: (newQuery) => {\n if (isActive && newQuery.trim()) {\n onSubmit(newQuery.trim())\n }\n },\n })\n\n useInput(handleInput, { isActive })\n\n if (runStatus === \"running\") {\n return null\n }\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"gray\">\n <Text>\n <Text color={runStatus === \"completed\" ? \"green\" : \"yellow\"} bold>\n {runStatus === \"completed\" ? \"Completed\" : \"Stopped\"}\n </Text>\n <Text color=\"gray\"> - Enter a follow-up query or wait to exit</Text>\n </Text>\n <Box>\n <Text color=\"gray\">Continue: </Text>\n <Text>{input}</Text>\n <Text color=\"cyan\">_</Text>\n </Box>\n </Box>\n )\n}\n","import type React from \"react\"\nimport { RunSetting } from \"../../components/index.js\"\nimport type { RuntimeInfo } from \"../../types/index.js\"\nimport type { RunStatus } from \"../hooks/index.js\"\n\ntype StatusPanelProps = {\n runtimeInfo: RuntimeInfo\n eventCount: number\n runStatus: RunStatus\n}\n\nexport const StatusPanel = ({\n runtimeInfo,\n eventCount,\n runStatus,\n}: StatusPanelProps): React.ReactNode => {\n if (runStatus !== \"running\") {\n return null\n }\n\n return <RunSetting info={runtimeInfo} eventCount={eventCount} isEditing={false} />\n}\n","import type { PerstackEvent } from \"@perstack/core\"\nimport { useRun } from \"@perstack/react\"\nimport { useApp } from \"ink\"\nimport { useCallback, useEffect, useRef, useState } from \"react\"\nimport { useRuntimeInfo } from \"../../hooks/index.js\"\nimport type { InitialRuntimeConfig } from \"../../types/index.js\"\n\nexport type RunStatus = \"running\" | \"completed\" | \"stopped\"\n\ntype UseExecutionStateOptions = {\n expertKey: string\n query: string\n config: InitialRuntimeConfig\n continueTimeoutMs: number\n historicalEvents?: PerstackEvent[]\n onReady: (addEvent: (event: PerstackEvent) => void) => void\n onComplete: (result: { nextQuery: string | null }) => void\n}\n\nexport type ExecutionState = {\n activities: ReturnType<typeof useRun>[\"activities\"]\n streaming: ReturnType<typeof useRun>[\"streaming\"]\n eventCount: number\n runtimeInfo: ReturnType<typeof useRuntimeInfo>[\"runtimeInfo\"]\n runStatus: RunStatus\n isAcceptingContinue: boolean\n handleContinueSubmit: (query: string) => void\n clearTimeout: () => void\n}\n\nexport const useExecutionState = (options: UseExecutionStateOptions): ExecutionState => {\n const { expertKey, query, config, continueTimeoutMs, historicalEvents, onReady, onComplete } =\n options\n\n const { exit } = useApp()\n const runState = useRun()\n\n const { runtimeInfo, handleEvent, setQuery } = useRuntimeInfo({\n initialExpertName: expertKey,\n initialConfig: config,\n })\n\n const [runStatus, setRunStatus] = useState<RunStatus>(\"running\")\n const [isAcceptingContinue, setIsAcceptingContinue] = useState(false)\n const timeoutRef = useRef<NodeJS.Timeout | null>(null)\n\n const clearTimeoutIfExists = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n }, [])\n\n const startExitTimeout = useCallback(() => {\n clearTimeoutIfExists()\n timeoutRef.current = setTimeout(() => {\n onComplete({ nextQuery: null })\n exit()\n }, continueTimeoutMs)\n }, [clearTimeoutIfExists, continueTimeoutMs, onComplete, exit])\n\n useEffect(() => {\n setQuery(query)\n }, [query, setQuery])\n\n useEffect(() => {\n if (historicalEvents && historicalEvents.length > 0) {\n runState.appendHistoricalEvents(historicalEvents)\n }\n }, [historicalEvents, runState.appendHistoricalEvents])\n\n useEffect(() => {\n onReady((event: PerstackEvent) => {\n runState.addEvent(event)\n const result = handleEvent(event)\n\n if (result?.completed) {\n setRunStatus(\"completed\")\n setIsAcceptingContinue(true)\n startExitTimeout()\n } else if (result?.stopped) {\n setRunStatus(\"stopped\")\n setIsAcceptingContinue(true)\n startExitTimeout()\n }\n })\n }, [onReady, runState.addEvent, handleEvent, startExitTimeout])\n\n useEffect(() => {\n return () => {\n clearTimeoutIfExists()\n }\n }, [clearTimeoutIfExists])\n\n const handleContinueSubmit = useCallback(\n (newQuery: string) => {\n if (isAcceptingContinue && newQuery.trim()) {\n clearTimeoutIfExists()\n onComplete({ nextQuery: newQuery.trim() })\n exit()\n }\n },\n [isAcceptingContinue, clearTimeoutIfExists, onComplete, exit],\n )\n\n return {\n activities: runState.activities,\n streaming: runState.streaming,\n eventCount: runState.eventCount,\n runtimeInfo,\n runStatus,\n isAcceptingContinue,\n handleContinueSubmit,\n clearTimeout: clearTimeoutIfExists,\n }\n}\n","import type { PerstackEvent } from \"@perstack/core\"\nimport { Box, useApp, useInput } from \"ink\"\nimport { StreamingDisplay } from \"../components/index.js\"\nimport { ActivityLogPanel, ContinueInputPanel, StatusPanel } from \"./components/index.js\"\nimport { useExecutionState } from \"./hooks/index.js\"\nimport type { ExecutionParams, ExecutionResult } from \"./types.js\"\n\ntype ExecutionAppProps = ExecutionParams & {\n onReady: (addEvent: (event: PerstackEvent) => void) => void\n onComplete: (result: ExecutionResult) => void\n}\n\nexport const ExecutionApp = (props: ExecutionAppProps) => {\n const { expertKey, query, config, continueTimeoutMs, historicalEvents, onReady, onComplete } =\n props\n\n const { exit } = useApp()\n\n const state = useExecutionState({\n expertKey,\n query,\n config,\n continueTimeoutMs,\n historicalEvents,\n onReady,\n onComplete,\n })\n\n useInput((input, key) => {\n if (key.ctrl && input === \"c\") {\n state.clearTimeout()\n exit()\n }\n })\n\n return (\n <Box flexDirection=\"column\">\n <ActivityLogPanel activities={state.activities} />\n <StreamingDisplay streaming={state.streaming} />\n <StatusPanel\n runtimeInfo={state.runtimeInfo}\n eventCount={state.eventCount}\n runStatus={state.runStatus}\n />\n <ContinueInputPanel\n isActive={state.isAcceptingContinue}\n runStatus={state.runStatus}\n onSubmit={state.handleContinueSubmit}\n />\n </Box>\n )\n}\n","import type { PerstackEvent } from \"@perstack/core\"\nimport { render } from \"ink\"\nimport { EventQueue } from \"../utils/event-queue.js\"\nimport { ExecutionApp } from \"./app.js\"\nimport type { ExecutionParams, ExecutionResult } from \"./types.js\"\n\ntype RenderExecutionResult = {\n result: Promise<ExecutionResult>\n eventListener: (event: PerstackEvent) => void\n}\n\n/**\n * Renders the execution TUI phase.\n * Returns a promise that resolves with the execution result (next query or null).\n * Also returns an event listener to feed events into the TUI.\n */\nexport function renderExecution(params: ExecutionParams): RenderExecutionResult {\n const eventQueue = new EventQueue()\n\n const result = new Promise<ExecutionResult>((resolve, reject) => {\n let resolved = false\n\n const { waitUntilExit } = render(\n <ExecutionApp\n {...params}\n onReady={(handler) => {\n eventQueue.setHandler(handler)\n }}\n onComplete={(result) => {\n resolved = true\n resolve(result)\n }}\n />,\n )\n\n waitUntilExit()\n .then(() => {\n if (!resolved) {\n reject(new Error(\"Execution cancelled\"))\n }\n })\n .catch(reject)\n })\n\n return {\n result,\n eventListener: (event: PerstackEvent) => {\n eventQueue.emit(event)\n },\n }\n}\n","import { useTextInput } from \"@perstack/tui-components\"\nimport { Box, Text, useApp, useInput } from \"ink\"\nimport { useCallback, useEffect, useMemo, useReducer, useState } from \"react\"\nimport { BrowserRouter } from \"../components/index.js\"\nimport { type InputAreaContextValue, InputAreaProvider } from \"../context/index.js\"\nimport { assertNever } from \"../helpers.js\"\nimport type { CheckpointHistoryItem, ExpertOption, JobHistoryItem } from \"../types/index.js\"\nimport type { SelectionParams, SelectionResult } from \"./types.js\"\n\n// Selection-specific input states (excludes running state)\ntype SelectionState =\n | { type: \"browsingHistory\"; jobs: JobHistoryItem[] }\n | { type: \"browsingExperts\"; experts: ExpertOption[] }\n | { type: \"browsingCheckpoints\"; job: JobHistoryItem; checkpoints: CheckpointHistoryItem[] }\n | { type: \"enteringQuery\"; expertKey: string }\n\ntype SelectionAction =\n | { type: \"BROWSE_HISTORY\"; jobs: JobHistoryItem[] }\n | { type: \"BROWSE_EXPERTS\"; experts: ExpertOption[] }\n | { type: \"SELECT_EXPERT\"; expertKey: string }\n | { type: \"SELECT_JOB\"; job: JobHistoryItem; checkpoints: CheckpointHistoryItem[] }\n | { type: \"GO_BACK_FROM_CHECKPOINTS\"; jobs: JobHistoryItem[] }\n\nconst selectionReducer = (_state: SelectionState, action: SelectionAction): SelectionState => {\n switch (action.type) {\n case \"BROWSE_HISTORY\":\n return { type: \"browsingHistory\", jobs: action.jobs }\n case \"BROWSE_EXPERTS\":\n return { type: \"browsingExperts\", experts: action.experts }\n case \"SELECT_EXPERT\":\n return { type: \"enteringQuery\", expertKey: action.expertKey }\n case \"SELECT_JOB\":\n return { type: \"browsingCheckpoints\", job: action.job, checkpoints: action.checkpoints }\n case \"GO_BACK_FROM_CHECKPOINTS\":\n return { type: \"browsingHistory\", jobs: action.jobs }\n default:\n return assertNever(action)\n }\n}\n\ntype SelectionAppProps = SelectionParams & {\n onComplete: (result: SelectionResult) => void\n}\n\nexport const SelectionApp = (props: SelectionAppProps) => {\n const {\n showHistory,\n initialExpertKey,\n initialQuery,\n initialCheckpoint,\n configuredExperts,\n recentExperts,\n historyJobs,\n onLoadCheckpoints,\n onComplete,\n } = props\n\n const { exit } = useApp()\n\n // Combine configured and recent experts\n const allExperts = useMemo(() => {\n const configured = configuredExperts.map((e) => ({ ...e, source: \"configured\" as const }))\n const recent = recentExperts\n .filter((e) => !configured.some((c) => c.key === e.key))\n .map((e) => ({ ...e, source: \"recent\" as const }))\n return [...configured, ...recent]\n }, [configuredExperts, recentExperts])\n\n // Determine initial state\n const getInitialState = (): SelectionState => {\n // If expert and query are both provided, we'll complete immediately (handled in useEffect)\n if (initialExpertKey && !initialQuery) {\n return { type: \"enteringQuery\", expertKey: initialExpertKey }\n }\n if (showHistory && historyJobs.length > 0) {\n return { type: \"browsingHistory\", jobs: historyJobs }\n }\n return { type: \"browsingExperts\", experts: allExperts }\n }\n\n const [state, dispatch] = useReducer(selectionReducer, undefined, getInitialState)\n const [selectedCheckpoint, setSelectedCheckpoint] = useState<CheckpointHistoryItem | undefined>(\n initialCheckpoint,\n )\n\n // If both expert and query are provided, complete immediately\n useEffect(() => {\n if (initialExpertKey && initialQuery) {\n onComplete({\n expertKey: initialExpertKey,\n query: initialQuery,\n checkpoint: initialCheckpoint,\n })\n exit()\n }\n }, [initialExpertKey, initialQuery, initialCheckpoint, onComplete, exit])\n\n // Text input for query\n const { input: queryInput, handleInput: handleQueryInput } = useTextInput({\n onSubmit: (query) => {\n if (state.type === \"enteringQuery\" && query.trim()) {\n onComplete({\n expertKey: state.expertKey,\n query: query.trim(),\n checkpoint: selectedCheckpoint,\n })\n exit()\n }\n },\n })\n\n useInput(handleQueryInput, { isActive: state.type === \"enteringQuery\" })\n\n // Handlers\n const handleExpertSelect = useCallback((expertKey: string) => {\n dispatch({ type: \"SELECT_EXPERT\", expertKey })\n }, [])\n\n const handleJobSelect = useCallback(\n async (job: JobHistoryItem) => {\n try {\n const checkpoints = await onLoadCheckpoints(job)\n dispatch({ type: \"SELECT_JOB\", job, checkpoints })\n } catch {\n // Failed to load checkpoints, fallback to empty list\n dispatch({ type: \"SELECT_JOB\", job, checkpoints: [] })\n }\n },\n [onLoadCheckpoints],\n )\n\n const handleJobResume = useCallback(\n async (job: JobHistoryItem) => {\n try {\n const checkpoints = await onLoadCheckpoints(job)\n const latestCheckpoint = checkpoints[0]\n if (latestCheckpoint) {\n setSelectedCheckpoint(latestCheckpoint)\n }\n // Enter query mode regardless of whether checkpoint exists\n dispatch({ type: \"SELECT_EXPERT\", expertKey: job.expertKey })\n } catch {\n // Failed to load checkpoints, just enter query mode without checkpoint\n dispatch({ type: \"SELECT_EXPERT\", expertKey: job.expertKey })\n }\n },\n [onLoadCheckpoints],\n )\n\n const handleCheckpointResume = useCallback(\n (checkpoint: CheckpointHistoryItem) => {\n setSelectedCheckpoint(checkpoint)\n // Need to get expertKey from the job - for now use empty and let parent handle\n if (state.type === \"browsingCheckpoints\") {\n dispatch({ type: \"SELECT_EXPERT\", expertKey: state.job.expertKey })\n }\n },\n [state],\n )\n\n const handleBack = useCallback(() => {\n if (state.type === \"browsingCheckpoints\") {\n dispatch({ type: \"GO_BACK_FROM_CHECKPOINTS\", jobs: historyJobs })\n }\n }, [state, historyJobs])\n\n const handleSwitchToExperts = useCallback(() => {\n dispatch({ type: \"BROWSE_EXPERTS\", experts: allExperts })\n }, [allExperts])\n\n const handleSwitchToHistory = useCallback(() => {\n dispatch({ type: \"BROWSE_HISTORY\", jobs: historyJobs })\n }, [historyJobs])\n\n // Handle Ctrl+C to exit\n useInput((input, key) => {\n if (key.ctrl && input === \"c\") {\n exit()\n }\n })\n\n // Context for browser components\n const contextValue = useMemo<InputAreaContextValue>(\n () => ({\n onExpertSelect: handleExpertSelect,\n onQuerySubmit: () => {}, // Not used in browser\n onJobSelect: handleJobSelect,\n onJobResume: handleJobResume,\n onCheckpointSelect: () => {}, // Not used in selection (no event browsing)\n onCheckpointResume: handleCheckpointResume,\n onEventSelect: () => {}, // Not used in selection\n onBack: handleBack,\n onSwitchToExperts: handleSwitchToExperts,\n onSwitchToHistory: handleSwitchToHistory,\n }),\n [\n handleExpertSelect,\n handleJobSelect,\n handleJobResume,\n handleCheckpointResume,\n handleBack,\n handleSwitchToExperts,\n handleSwitchToHistory,\n ],\n )\n\n // If already completed via useEffect, don't render\n if (initialExpertKey && initialQuery) {\n return null\n }\n\n return (\n <Box flexDirection=\"column\">\n <InputAreaProvider value={contextValue}>\n {(state.type === \"browsingHistory\" ||\n state.type === \"browsingExperts\" ||\n state.type === \"browsingCheckpoints\") && (\n <BrowserRouter\n inputState={state as Parameters<typeof BrowserRouter>[0][\"inputState\"]}\n showEventsHint={false}\n />\n )}\n </InputAreaProvider>\n\n {state.type === \"enteringQuery\" && (\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"gray\">\n <Text>\n <Text color=\"cyan\" bold>\n Expert:\n </Text>{\" \"}\n <Text>{state.expertKey}</Text>\n {selectedCheckpoint && (\n <Text color=\"gray\"> (resuming from step {selectedCheckpoint.stepNumber})</Text>\n )}\n </Text>\n <Box>\n <Text color=\"gray\">Query: </Text>\n <Text>{queryInput}</Text>\n <Text color=\"cyan\">_</Text>\n </Box>\n <Text dimColor>Press Enter to start</Text>\n </Box>\n )}\n </Box>\n )\n}\n","import { render } from \"ink\"\nimport { SelectionApp } from \"./app.js\"\nimport type { SelectionParams, SelectionResult } from \"./types.js\"\n\n/**\n * Renders the selection TUI phase.\n * Returns a promise that resolves with the selection result (expert, query, checkpoint).\n */\nexport async function renderSelection(params: SelectionParams): Promise<SelectionResult> {\n return new Promise((resolve, reject) => {\n let resolved = false\n\n const { waitUntilExit } = render(\n <SelectionApp\n {...params}\n onComplete={(result) => {\n resolved = true\n resolve(result)\n }}\n />,\n )\n\n waitUntilExit()\n .then(() => {\n if (!resolved) {\n reject(new Error(\"Selection cancelled\"))\n }\n })\n .catch(reject)\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport {\n defaultMaxRetries,\n defaultTimeout,\n parseWithFriendlyError,\n startCommandInputSchema,\n} from \"@perstack/core\"\nimport {\n createInitialJob,\n defaultRetrieveCheckpoint,\n defaultStoreCheckpoint,\n defaultStoreEvent,\n retrieveJob,\n storeJob,\n} from \"@perstack/filesystem-storage\"\nimport { findLockfile, loadLockfile, run as perstackRun, runtimeVersion } from \"@perstack/runtime\"\nimport { Command } from \"commander\"\nimport { resolveRunContext } from \"./lib/context.js\"\nimport { parseInteractiveToolCallResult } from \"./lib/interactive.js\"\nimport {\n getAllEventContentsForJob,\n getAllJobs,\n getCheckpointById,\n getCheckpointsWithDetails,\n type getEventContents,\n getRecentExperts,\n} from \"./lib/run-manager.js\"\nimport { renderExecution } from \"./tui/execution/index.js\"\nimport { renderSelection } from \"./tui/selection/index.js\"\nimport type { CheckpointHistoryItem, JobHistoryItem } from \"./tui/types/index.js\"\n\nconst CONTINUE_TIMEOUT_MS = 60_000\n\nexport const startCommand = new Command()\n .command(\"start\")\n .description(\"Start Perstack with interactive TUI\")\n .argument(\"[expertKey]\", \"Expert key to run (optional, will prompt if not provided)\")\n .argument(\"[query]\", \"Query to run (optional, will prompt if not provided)\")\n .option(\"--config <configPath>\", \"Path to perstack.toml config file\")\n .option(\"--provider <provider>\", \"Provider to use\")\n .option(\"--model <model>\", \"Model to use\")\n .option(\n \"--reasoning-budget <budget>\",\n \"Reasoning budget for native LLM reasoning (minimal, low, medium, high, or token count)\",\n )\n .option(\n \"--max-steps <maxSteps>\",\n \"Maximum number of steps to run, default is undefined (no limit)\",\n )\n .option(\"--max-retries <maxRetries>\", \"Maximum number of generation retries, default is 5\")\n .option(\n \"--timeout <timeout>\",\n \"Timeout for each generation in milliseconds, default is 300000 (5 minutes)\",\n )\n .option(\"--job-id <jobId>\", \"Job ID for identifying the job\")\n .option(\n \"--env-path <path>\",\n \"Path to the environment file (can be specified multiple times), default is .env and .env.local\",\n (value: string, previous: string[]) => previous.concat(value),\n [] as string[],\n )\n .option(\"--verbose\", \"Enable verbose logging\")\n .option(\"--continue\", \"Continue the most recent job with new query\")\n .option(\"--continue-job <jobId>\", \"Continue the specified job with new query\")\n .option(\n \"--resume-from <checkpointId>\",\n \"Resume from a specific checkpoint (requires --continue or --continue-job)\",\n )\n .option(\"-i, --interactive-tool-call-result\", \"Query is interactive tool call result\")\n .action(async (expertKey, query, options) => {\n const input = parseWithFriendlyError(startCommandInputSchema, { expertKey, query, options })\n\n try {\n // Phase 1: Initialize context\n const { perstackConfig, checkpoint, env, providerConfig, model, experts } =\n await resolveRunContext({\n configPath: input.options.config,\n provider: input.options.provider,\n model: input.options.model,\n envPath: input.options.envPath,\n continue: input.options.continue,\n continueJob: input.options.continueJob,\n resumeFrom: input.options.resumeFrom,\n expertKey: input.expertKey,\n })\n\n const maxSteps = input.options.maxSteps ?? perstackConfig.maxSteps\n const maxRetries = input.options.maxRetries ?? perstackConfig.maxRetries ?? defaultMaxRetries\n const timeout = input.options.timeout ?? perstackConfig.timeout ?? defaultTimeout\n\n // Prepare expert lists\n const configuredExperts = Object.keys(perstackConfig.experts ?? {}).map((key) => ({\n key,\n name: key,\n }))\n const recentExperts = getRecentExperts(10)\n\n // Prepare history jobs (only if browsing is needed)\n const showHistory = !input.expertKey && !input.query && !checkpoint\n const historyJobs: JobHistoryItem[] = showHistory\n ? getAllJobs().map((j) => ({\n jobId: j.id,\n status: j.status,\n expertKey: j.coordinatorExpertKey,\n totalSteps: j.totalSteps,\n startedAt: j.startedAt,\n finishedAt: j.finishedAt,\n }))\n : []\n\n // Phase 2: Selection - get expert, query, and optional checkpoint\n const selection = await renderSelection({\n showHistory,\n initialExpertKey: input.expertKey,\n initialQuery: input.query,\n initialCheckpoint: checkpoint\n ? {\n id: checkpoint.id,\n jobId: checkpoint.jobId,\n runId: checkpoint.runId,\n stepNumber: checkpoint.stepNumber,\n contextWindowUsage: checkpoint.contextWindowUsage ?? 0,\n }\n : undefined,\n configuredExperts,\n recentExperts,\n historyJobs,\n onLoadCheckpoints: async (j: JobHistoryItem): Promise<CheckpointHistoryItem[]> => {\n const checkpoints = getCheckpointsWithDetails(j.jobId)\n return checkpoints.map((cp) => ({ ...cp, jobId: j.jobId }))\n },\n })\n\n // Validate selection\n if (!selection.expertKey) {\n console.error(\"Expert key is required\")\n return\n }\n if (!selection.query && !selection.checkpoint) {\n console.error(\"Query is required\")\n return\n }\n\n // Resolve checkpoint if selected from TUI\n let currentCheckpoint = selection.checkpoint\n ? getCheckpointById(selection.checkpoint.jobId, selection.checkpoint.id)\n : checkpoint\n\n if (currentCheckpoint && currentCheckpoint.expert.key !== selection.expertKey) {\n console.error(\n `Checkpoint expert key ${currentCheckpoint.expert.key} does not match input expert key ${selection.expertKey}`,\n )\n return\n }\n\n // Load lockfile if present\n const lockfilePath = findLockfile()\n const lockfile = lockfilePath ? (loadLockfile(lockfilePath) ?? undefined) : undefined\n\n // Phase 3: Execution loop\n let currentQuery: string | null = selection.query\n let currentJobId = currentCheckpoint?.jobId ?? input.options.jobId ?? createId()\n // Track if the next query should be treated as an interactive tool result\n let isNextQueryInteractiveToolResult = input.options.interactiveToolCallResult ?? false\n\n // Track whether this is the first iteration (for historical events display)\n // On first iteration, load all events for the job up to the checkpoint\n // On subsequent iterations, skip historical events (previous TUI already displayed them)\n let isFirstIteration = true\n const initialHistoricalEvents: ReturnType<typeof getEventContents> | undefined =\n currentCheckpoint\n ? getAllEventContentsForJob(currentCheckpoint.jobId, currentCheckpoint.stepNumber)\n : undefined\n\n while (currentQuery !== null) {\n // Only pass historical events on first iteration\n // Subsequent iterations: previous TUI output remains on screen\n const historicalEvents = isFirstIteration ? initialHistoricalEvents : undefined\n\n // Generate a new runId for each iteration\n const runId = createId()\n\n // Start execution TUI\n const { result: executionResult, eventListener } = renderExecution({\n expertKey: selection.expertKey,\n query: currentQuery,\n config: {\n runtimeVersion,\n model,\n maxSteps,\n maxRetries,\n timeout,\n contextWindowUsage: currentCheckpoint?.contextWindowUsage ?? 0,\n },\n continueTimeoutMs: CONTINUE_TIMEOUT_MS,\n historicalEvents,\n })\n\n // Run the expert\n const runResult = await perstackRun(\n {\n setting: {\n jobId: currentJobId,\n runId,\n expertKey: selection.expertKey,\n input:\n isNextQueryInteractiveToolResult && currentCheckpoint\n ? parseInteractiveToolCallResult(currentQuery, currentCheckpoint)\n : { text: currentQuery },\n experts,\n model,\n providerConfig,\n reasoningBudget: input.options.reasoningBudget ?? perstackConfig.reasoningBudget,\n maxSteps: input.options.maxSteps ?? perstackConfig.maxSteps,\n maxRetries: input.options.maxRetries ?? perstackConfig.maxRetries,\n timeout: input.options.timeout ?? perstackConfig.timeout,\n perstackApiBaseUrl: perstackConfig.perstackApiBaseUrl,\n perstackApiKey: env.PERSTACK_API_KEY,\n perstackBaseSkillCommand: perstackConfig.perstackBaseSkillCommand,\n env,\n verbose: input.options.verbose,\n },\n checkpoint: currentCheckpoint,\n },\n {\n eventListener,\n storeCheckpoint: defaultStoreCheckpoint,\n storeEvent: defaultStoreEvent,\n retrieveCheckpoint: defaultRetrieveCheckpoint,\n storeJob,\n retrieveJob,\n createJob: createInitialJob,\n lockfile,\n },\n )\n\n // Wait for execution TUI to complete (user input or timeout)\n const result = await executionResult\n\n // Check if user wants to continue\n const canContinue =\n runResult.status === \"completed\" ||\n runResult.status === \"stoppedByExceededMaxSteps\" ||\n runResult.status === \"stoppedByError\" ||\n runResult.status === \"stoppedByInteractiveTool\"\n\n if (result.nextQuery && canContinue) {\n currentQuery = result.nextQuery\n currentCheckpoint = runResult\n currentJobId = runResult.jobId\n\n // If the run stopped for interactive tool, the next query is an interactive tool result\n isNextQueryInteractiveToolResult = runResult.status === \"stoppedByInteractiveTool\"\n\n // Mark first iteration as complete (subsequent TUIs won't show historical events)\n isFirstIteration = false\n } else {\n currentQuery = null\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n console.error(error.message)\n } else {\n console.error(error)\n }\n }\n })\n","#!/usr/bin/env node\n\nimport { Command } from \"commander\"\nimport packageJson from \"../package.json\" with { type: \"json\" }\nimport { installCommand } from \"../src/install.js\"\nimport { logCommand } from \"../src/log.js\"\nimport { runCommand } from \"../src/run.js\"\nimport { startCommand } from \"../src/start.js\"\n\nconst program = new Command()\n .name(packageJson.name)\n .description(packageJson.description)\n .version(packageJson.version)\n .addCommand(startCommand)\n .addCommand(runCommand)\n .addCommand(logCommand)\n .addCommand(installCommand)\nprogram.parse()\n"]}
1
+ {"version":3,"sources":["../../package.json","../../src/lib/get-env.ts","../../src/lib/perstack-toml.ts","../../src/install.ts","../../src/lib/log/data-fetcher.ts","../../src/lib/log/filter.ts","../../src/lib/log/formatter.ts","../../src/log.ts","../../src/lib/provider-config.ts","../../src/lib/run-manager.ts","../../src/lib/context.ts","../../src/lib/interactive.ts","../../src/run.ts","../../src/tui/utils/event-queue.ts","../../src/tui/context/input-area-context.tsx","../../src/tui/helpers.ts","../../src/tui/constants.ts","../../../../packages/tui-components/src/hooks/use-latest-ref.ts","../../../../packages/tui-components/src/hooks/use-list-navigation.ts","../../../../packages/tui-components/src/hooks/use-text-input.ts","../../src/tui/components/list-browser.tsx","../../src/tui/components/input-areas/browsing-checkpoints.tsx","../../src/tui/components/input-areas/browsing-event-detail.tsx","../../src/tui/components/input-areas/browsing-events.tsx","../../src/tui/hooks/state/use-runtime-info.ts","../../src/tui/hooks/ui/use-expert-selector.ts","../../src/tui/components/expert-list.tsx","../../src/tui/components/expert-selector-base.tsx","../../src/tui/components/input-areas/browsing-experts.tsx","../../src/tui/components/input-areas/browsing-history.tsx","../../src/tui/components/browser-router.tsx","../../src/tui/components/action-row.tsx","../../src/tui/components/checkpoint-action-row.tsx","../../src/tui/components/run-setting.tsx","../../src/tui/components/streaming-display.tsx","../../src/tui/execution/components/activity-log-panel.tsx","../../src/tui/execution/components/continue-input-panel.tsx","../../src/tui/execution/components/status-panel.tsx","../../src/tui/execution/hooks/use-execution-state.ts","../../src/tui/execution/app.tsx","../../src/tui/execution/render.tsx","../../src/tui/selection/app.tsx","../../src/tui/selection/render.tsx","../../src/start.ts","../../bin/cli.ts"],"names":["path","readFile","TOML","Command","latestJob","checkpoint","events","result","getAllJobs","runtimeGetAllJobs","getAllRuns","runtimeGetAllRuns","getCheckpointsByJobId","runtimeGetCheckpointsByJobId","existsSync","getRunIdsByJobId","runtimeGetEventContents","parseWithFriendlyError","perstackRun","defaultRetrieveCheckpoint","retrieveJob","formatTimestamp","useState","useCallback","jsx","jsxs","Text","useInput","Box","Fragment","useMemo","useRun","useRef","useEffect","useApp","render","findLockfile","loadLockfile","createId","defaultStoreCheckpoint","defaultStoreEvent","storeJob","createInitialJob"],"mappings":"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","file":"cli.js","sourcesContent":["{\n \"name\": \"perstack\",\n \"version\": \"0.0.79\",\n \"description\": \"PerStack CLI\",\n \"author\": \"Wintermute Technologies, Inc.\",\n \"license\": \"Apache-2.0\",\n \"type\": \"module\",\n \"publishConfig\": {\n \"access\": \"public\",\n \"bin\": {\n \"perstack\": \"dist/bin/cli.js\"\n }\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"pnpm run clean && tsup --config ./tsup.config.ts\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"dependencies\": {\n \"@paralleldrive/cuid2\": \"^3.0.6\",\n \"@perstack/api-client\": \"^0.0.54\",\n \"@perstack/core\": \"workspace:*\",\n \"@perstack/react\": \"workspace:*\",\n \"@perstack/runtime\": \"workspace:*\",\n \"commander\": \"^14.0.2\",\n \"dotenv\": \"^17.2.3\",\n \"ink\": \"^6.6.0\",\n \"react\": \"^19.2.3\",\n \"smol-toml\": \"^1.6.0\",\n \"@perstack/filesystem-storage\": \"workspace:*\"\n },\n \"devDependencies\": {\n \"@perstack/tui-components\": \"workspace:*\",\n \"@tsconfig/node22\": \"^22.0.5\",\n \"@types/node\": \"^25.0.10\",\n \"@types/react\": \"^19.2.9\",\n \"tsup\": \"^8.5.1\",\n \"typescript\": \"^5.9.3\",\n \"vitest\": \"^4.0.18\"\n },\n \"engines\": {\n \"node\": \">=22.0.0\"\n }\n}\n","import dotenv from \"dotenv\"\n\nexport function getEnv(envPath: string[]): Record<string, string> {\n const env: Record<string, string> = Object.fromEntries(\n Object.entries(process.env)\n .filter(([_, value]) => !!value)\n .map(([key, value]) => [key, value as string]),\n )\n dotenv.config({ path: envPath, processEnv: env, quiet: true })\n return env\n}\n","import { readFile } from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { type PerstackConfig, parseWithFriendlyError, perstackConfigSchema } from \"@perstack/core\"\nimport TOML from \"smol-toml\"\n\nconst ALLOWED_CONFIG_HOSTS = [\"raw.githubusercontent.com\"]\n\nexport async function getPerstackConfig(configPath?: string): Promise<PerstackConfig> {\n const configString = await findPerstackConfigString(configPath)\n if (configString === null) {\n throw new Error(\"perstack.toml not found. Create one or specify --config path.\")\n }\n return await parsePerstackConfig(configString)\n}\n\nfunction isRemoteUrl(configPath: string): boolean {\n const lower = configPath.toLowerCase()\n return lower.startsWith(\"https://\") || lower.startsWith(\"http://\")\n}\n\nasync function fetchRemoteConfig(url: string): Promise<string> {\n let parsed: URL\n try {\n parsed = new URL(url)\n } catch {\n throw new Error(`Invalid remote config URL: ${url}`)\n }\n if (parsed.protocol !== \"https:\") {\n throw new Error(\"Remote config requires HTTPS\")\n }\n if (!ALLOWED_CONFIG_HOSTS.includes(parsed.hostname)) {\n throw new Error(`Remote config only allowed from: ${ALLOWED_CONFIG_HOSTS.join(\", \")}`)\n }\n try {\n const response = await fetch(url, { redirect: \"error\" })\n if (!response.ok) {\n throw new Error(`${response.status} ${response.statusText}`)\n }\n return await response.text()\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error)\n throw new Error(`Failed to fetch remote config: ${message}`)\n }\n}\n\nasync function findPerstackConfigString(configPath?: string): Promise<string | null> {\n if (configPath) {\n if (isRemoteUrl(configPath)) {\n return await fetchRemoteConfig(configPath)\n }\n try {\n const tomlString = await readFile(path.resolve(process.cwd(), configPath), \"utf-8\")\n return tomlString\n } catch {\n throw new Error(`Given config path \"${configPath}\" is not found`)\n }\n }\n return await findPerstackConfigStringRecursively(path.resolve(process.cwd()))\n}\n\nasync function findPerstackConfigStringRecursively(cwd: string): Promise<string | null> {\n try {\n const tomlString = await readFile(path.resolve(cwd, \"perstack.toml\"), \"utf-8\")\n return tomlString\n } catch {\n if (cwd === path.parse(cwd).root) {\n return null\n }\n return await findPerstackConfigStringRecursively(path.dirname(cwd))\n }\n}\n\nasync function parsePerstackConfig(config: string): Promise<PerstackConfig> {\n const toml = TOML.parse(config ?? \"\")\n return parseWithFriendlyError(perstackConfigSchema, toml, \"perstack.toml\")\n}\n","import { readFile, writeFile } from \"node:fs/promises\"\nimport path from \"node:path\"\nimport { createApiClient } from \"@perstack/api-client\"\nimport {\n defaultPerstackApiBaseUrl,\n type Expert,\n expertSchema,\n type Lockfile,\n type LockfileExpert,\n type PerstackConfig,\n type RuntimeVersion,\n type Skill,\n} from \"@perstack/core\"\nimport { collectToolDefinitionsForExpert } from \"@perstack/runtime\"\nimport { Command } from \"commander\"\nimport TOML from \"smol-toml\"\nimport { getEnv } from \"./lib/get-env.js\"\nimport { getPerstackConfig } from \"./lib/perstack-toml.js\"\n\nasync function findConfigPath(configPath?: string): Promise<string> {\n if (configPath) {\n return path.resolve(process.cwd(), configPath)\n }\n return await findConfigPathRecursively(process.cwd())\n}\n\nasync function findConfigPathRecursively(cwd: string): Promise<string> {\n const configPath = path.resolve(cwd, \"perstack.toml\")\n try {\n await readFile(configPath)\n return configPath\n } catch {\n if (cwd === path.parse(cwd).root) {\n throw new Error(\"perstack.toml not found. Create one or specify --config path.\")\n }\n return await findConfigPathRecursively(path.dirname(cwd))\n }\n}\n\ntype PublishedExpertData = {\n name: string\n version: string\n description?: string\n instruction: string\n minRuntimeVersion?: RuntimeVersion\n skills?: Record<\n string,\n | {\n type: \"mcpStdioSkill\"\n name: string\n description: string\n rule?: string\n pick?: string[]\n omit?: string[]\n command: \"npx\" | \"uvx\"\n packageName: string\n requiredEnv?: string[]\n }\n | {\n type: \"mcpSseSkill\"\n name: string\n description: string\n rule?: string\n pick?: string[]\n omit?: string[]\n endpoint: string\n }\n | {\n type: \"interactiveSkill\"\n name: string\n description: string\n rule?: string\n tools: Record<string, { description: string; inputJsonSchema: string }>\n }\n >\n delegates?: string[]\n tags?: string[]\n}\n\nfunction toRuntimeExpert(key: string, expert: PublishedExpertData): Expert {\n const skills: Record<string, Skill> = Object.fromEntries(\n Object.entries(expert.skills ?? {}).map(([name, skill]) => {\n switch (skill.type) {\n case \"mcpStdioSkill\":\n return [\n name,\n {\n type: skill.type,\n name,\n description: skill.description,\n rule: skill.rule,\n pick: skill.pick ?? [],\n omit: skill.omit ?? [],\n command: skill.command,\n packageName: skill.packageName,\n requiredEnv: skill.requiredEnv ?? [],\n lazyInit: false,\n },\n ]\n case \"mcpSseSkill\":\n return [\n name,\n {\n type: skill.type,\n name,\n description: skill.description,\n rule: skill.rule,\n pick: skill.pick ?? [],\n omit: skill.omit ?? [],\n endpoint: skill.endpoint,\n lazyInit: false,\n },\n ]\n case \"interactiveSkill\":\n return [\n name,\n {\n type: skill.type,\n name,\n description: skill.description,\n rule: skill.rule,\n tools: Object.fromEntries(\n Object.entries(skill.tools).map(([toolName, tool]) => [\n toolName,\n {\n name: toolName,\n description: tool.description,\n inputSchema: JSON.parse(tool.inputJsonSchema),\n },\n ]),\n ),\n },\n ]\n default: {\n throw new Error(`Unknown skill type: ${(skill as { type: string }).type}`)\n }\n }\n }),\n )\n return {\n key,\n name: expert.name,\n version: expert.version,\n minRuntimeVersion: expert.minRuntimeVersion ?? \"v1.0\",\n description: expert.description ?? \"\",\n instruction: expert.instruction,\n skills,\n delegates: expert.delegates ?? [],\n tags: expert.tags ?? [],\n }\n}\n\nfunction configExpertToExpert(\n key: string,\n configExpert: NonNullable<PerstackConfig[\"experts\"]>[string],\n): Expert {\n return expertSchema.parse({\n key,\n name: key,\n version: configExpert.version ?? \"1.0.0\",\n description: configExpert.description,\n instruction: configExpert.instruction,\n skills: configExpert.skills,\n delegates: configExpert.delegates,\n tags: configExpert.tags,\n providerTools: configExpert.providerTools,\n providerSkills: configExpert.providerSkills,\n providerToolOptions: configExpert.providerToolOptions,\n })\n}\n\nasync function resolveAllExperts(\n config: PerstackConfig,\n env: Record<string, string>,\n): Promise<Record<string, Expert>> {\n const experts: Record<string, Expert> = {}\n for (const [key, configExpert] of Object.entries(config.experts ?? {})) {\n experts[key] = configExpertToExpert(key, configExpert)\n }\n const toResolve = new Set<string>()\n for (const expert of Object.values(experts)) {\n for (const delegateKey of expert.delegates) {\n if (!experts[delegateKey]) {\n toResolve.add(delegateKey)\n }\n }\n }\n if (toResolve.size === 0) {\n return experts\n }\n const apiKey = env.PERSTACK_API_KEY\n if (!apiKey) {\n throw new Error(\"PERSTACK_API_KEY is required to resolve remote delegates\")\n }\n const client = createApiClient({\n baseUrl: config.perstackApiBaseUrl ?? defaultPerstackApiBaseUrl,\n apiKey,\n })\n while (toResolve.size > 0) {\n const delegateKey = toResolve.values().next().value\n if (!delegateKey) break\n toResolve.delete(delegateKey)\n if (experts[delegateKey]) continue\n const result = await client.experts.get(delegateKey)\n if (!result.ok) {\n throw new Error(`Failed to resolve delegate \"${delegateKey}\": ${result.error.message}`)\n }\n const publishedExpert = result.data.data.definition.experts[delegateKey]\n if (!publishedExpert) {\n throw new Error(`Expert \"${delegateKey}\" not found in API response`)\n }\n experts[delegateKey] = toRuntimeExpert(delegateKey, publishedExpert)\n for (const nestedDelegate of publishedExpert.delegates ?? []) {\n if (!experts[nestedDelegate]) {\n toResolve.add(nestedDelegate)\n }\n }\n }\n return experts\n}\n\nfunction expertToLockfileExpert(\n expert: Expert,\n toolDefinitions: {\n skillName: string\n name: string\n description?: string\n inputSchema: Record<string, unknown>\n }[],\n): LockfileExpert {\n return {\n key: expert.key,\n name: expert.name,\n version: expert.version,\n description: expert.description,\n instruction: expert.instruction,\n skills: expert.skills,\n delegates: expert.delegates,\n tags: expert.tags,\n toolDefinitions,\n }\n}\n\nfunction generateLockfileToml(lockfile: Lockfile): string {\n return TOML.stringify(lockfile)\n}\n\nexport const installCommand = new Command()\n .command(\"install\")\n .description(\"Generate perstack.lock with tool definitions for faster startup\")\n .option(\"--config <configPath>\", \"Path to perstack.toml config file\")\n .option(\n \"--env-path <path>\",\n \"Path to the environment file (can be specified multiple times)\",\n (value: string, previous: string[]) => previous.concat(value),\n [] as string[],\n )\n .action(async (options) => {\n try {\n const configPath = await findConfigPath(options.config)\n const config = await getPerstackConfig(options.config)\n const envPath =\n options.envPath && options.envPath.length > 0\n ? options.envPath\n : (config.envPath ?? [\".env\", \".env.local\"])\n const env = getEnv(envPath)\n console.log(\"Resolving experts...\")\n const experts = await resolveAllExperts(config, env)\n console.log(`Found ${Object.keys(experts).length} expert(s)`)\n const lockfileExperts: Record<string, LockfileExpert> = {}\n for (const [key, expert] of Object.entries(experts)) {\n console.log(`Collecting tool definitions for ${key}...`)\n const toolDefinitions = await collectToolDefinitionsForExpert(expert, {\n env,\n perstackBaseSkillCommand: config.perstackBaseSkillCommand,\n })\n console.log(` Found ${toolDefinitions.length} tool(s)`)\n lockfileExperts[key] = expertToLockfileExpert(expert, toolDefinitions)\n }\n const lockfile: Lockfile = {\n version: \"1\",\n generatedAt: Date.now(),\n configPath: path.basename(configPath),\n experts: lockfileExperts,\n }\n const lockfilePath = path.join(path.dirname(configPath), \"perstack.lock\")\n const lockfileContent = generateLockfileToml(lockfile)\n await writeFile(lockfilePath, lockfileContent, \"utf-8\")\n console.log(`Generated ${lockfilePath}`)\n } catch (error) {\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`)\n } else {\n console.error(error)\n }\n process.exit(1)\n }\n })\n","import { existsSync, readdirSync, statSync } from \"node:fs\"\nimport path from \"node:path\"\nimport type { Checkpoint, Job, RunEvent, RunSetting } from \"@perstack/core\"\nimport {\n defaultRetrieveCheckpoint,\n getAllJobs,\n getAllRuns,\n getCheckpointsByJobId,\n getEventContents,\n getRunIdsByJobId,\n retrieveJob,\n} from \"@perstack/filesystem-storage\"\n\nexport interface LogDataFetcher {\n getJob(jobId: string): Promise<Job | undefined>\n getLatestJob(): Promise<Job | undefined>\n getRuns(jobId: string): Promise<RunSetting[]>\n getCheckpoints(jobId: string): Promise<Checkpoint[]>\n getCheckpoint(jobId: string, checkpointId: string): Promise<Checkpoint>\n getEvents(jobId: string, runId: string): Promise<RunEvent[]>\n getAllEventsForJob(jobId: string): Promise<RunEvent[]>\n}\n\nexport interface StorageAdapter {\n getAllJobs(): Promise<Job[]>\n retrieveJob(jobId: string): Promise<Job | undefined>\n getCheckpointsByJobId(jobId: string): Promise<Checkpoint[]>\n retrieveCheckpoint(jobId: string, checkpointId: string): Promise<Checkpoint>\n getEventContents(jobId: string, runId: string, maxStep?: number): Promise<RunEvent[]>\n getAllRuns(): Promise<RunSetting[]>\n getJobIds(): string[]\n getBasePath(): string\n}\n\nexport function createLogDataFetcher(storage: StorageAdapter): LogDataFetcher {\n return {\n async getJob(jobId: string): Promise<Job | undefined> {\n // First try to get from storage\n const job = await storage.retrieveJob(jobId)\n if (job) return job\n // Fallback: construct minimal job from checkpoints\n const checkpoints = await storage.getCheckpointsByJobId(jobId)\n if (checkpoints.length === 0) return undefined\n const firstCheckpoint = checkpoints[0]\n const lastCheckpoint = checkpoints[checkpoints.length - 1]\n return {\n id: jobId,\n coordinatorExpertKey: firstCheckpoint.expert.key,\n runtimeVersion: \"v1.0\",\n totalSteps: lastCheckpoint.stepNumber,\n usage: lastCheckpoint.usage,\n startedAt: getJobDirMtime(storage.getBasePath(), jobId),\n finishedAt: Date.now(),\n status: lastCheckpoint.status === \"completed\" ? \"completed\" : \"running\",\n }\n },\n\n async getLatestJob(): Promise<Job | undefined> {\n // First try standard storage\n const jobs = await storage.getAllJobs()\n if (jobs.length > 0) return jobs[0]\n // Fallback: scan job directories\n const jobIds = storage.getJobIds()\n if (jobIds.length === 0) return undefined\n // Sort by directory modification time (newest first)\n const basePath = storage.getBasePath()\n const sortedJobIds = jobIds\n .map((id) => ({ id, mtime: getJobDirMtime(basePath, id) }))\n .sort((a, b) => b.mtime - a.mtime)\n const latestJobId = sortedJobIds[0].id\n return this.getJob(latestJobId)\n },\n\n async getRuns(jobId: string): Promise<RunSetting[]> {\n const runs = await storage.getAllRuns()\n const jobRuns = runs.filter((r) => r.jobId === jobId)\n if (jobRuns.length > 0) return jobRuns\n // Fallback: extract unique runIds from checkpoints and return minimal run info\n const checkpoints = await storage.getCheckpointsByJobId(jobId)\n const runIds = [...new Set(checkpoints.map((c) => c.runId))]\n // Return minimal objects with just jobId and runId for event retrieval\n return runIds.map((runId) => ({ jobId, runId }) as unknown as RunSetting)\n },\n\n async getCheckpoints(jobId: string): Promise<Checkpoint[]> {\n return storage.getCheckpointsByJobId(jobId)\n },\n\n async getCheckpoint(jobId: string, checkpointId: string): Promise<Checkpoint> {\n return storage.retrieveCheckpoint(jobId, checkpointId)\n },\n\n async getEvents(jobId: string, runId: string): Promise<RunEvent[]> {\n return storage.getEventContents(jobId, runId)\n },\n\n async getAllEventsForJob(jobId: string): Promise<RunEvent[]> {\n const runs = await this.getRuns(jobId)\n const allEvents: RunEvent[] = []\n for (const run of runs) {\n const events = await storage.getEventContents(jobId, run.runId)\n allEvents.push(...events)\n }\n return allEvents.sort((a, b) => a.timestamp - b.timestamp)\n },\n }\n}\n\nfunction getJobDirMtime(basePath: string, jobId: string): number {\n try {\n const jobDir = path.join(basePath, \"jobs\", jobId)\n const stats = statSync(jobDir)\n return stats.mtimeMs\n } catch {\n return Date.now()\n }\n}\n\n/**\n * Create a storage adapter using filesystem helper functions directly.\n */\nexport function createStorageAdapter(basePath: string): StorageAdapter {\n return {\n getAllJobs: async () => getAllJobs(),\n retrieveJob: async (jobId) => retrieveJob(jobId),\n getCheckpointsByJobId: async (jobId) => getCheckpointsByJobId(jobId),\n retrieveCheckpoint: async (jobId, checkpointId) =>\n defaultRetrieveCheckpoint(jobId, checkpointId),\n getEventContents: async (jobId, runId, maxStep) => getEventContents(jobId, runId, maxStep),\n getAllRuns: async () => getAllRuns(),\n getJobIds: () => {\n const jobsDir = path.join(basePath, \"jobs\")\n if (!existsSync(jobsDir)) return []\n return readdirSync(jobsDir, { withFileTypes: true })\n .filter((d) => d.isDirectory())\n .map((d) => d.name)\n },\n getBasePath: () => basePath,\n }\n}\n","import type { RunEvent } from \"@perstack/core\"\nimport type { FilterCondition, FilterOptions, StepFilter } from \"./types.js\"\n\nexport const ERROR_EVENT_TYPES = new Set([\"stopRunByError\", \"retry\"])\nexport const TOOL_EVENT_TYPES = new Set([\n \"callTools\",\n \"resolveToolResults\",\n \"stopRunByInteractiveTool\",\n])\nexport const DELEGATION_EVENT_TYPES = new Set([\"stopRunByDelegate\"])\n\nexport function parseStepFilter(step: string): StepFilter {\n const trimmed = step.trim()\n const rangeMatch = trimmed.match(/^(\\d+)-(\\d+)$/)\n if (rangeMatch) {\n const min = Number(rangeMatch[1])\n const max = Number(rangeMatch[2])\n if (min > max) {\n throw new Error(`Invalid step range: ${step} (min ${min} > max ${max})`)\n }\n return { type: \"range\", min, max }\n }\n const gteMatch = trimmed.match(/^>=(\\d+)$/)\n if (gteMatch) {\n return { type: \"gte\", value: Number(gteMatch[1]) }\n }\n const gtMatch = trimmed.match(/^>(\\d+)$/)\n if (gtMatch) {\n return { type: \"gt\", value: Number(gtMatch[1]) }\n }\n const lteMatch = trimmed.match(/^<=(\\d+)$/)\n if (lteMatch) {\n return { type: \"lte\", value: Number(lteMatch[1]) }\n }\n const ltMatch = trimmed.match(/^<(\\d+)$/)\n if (ltMatch) {\n return { type: \"lt\", value: Number(ltMatch[1]) }\n }\n const exactMatch = trimmed.match(/^(\\d+)$/)\n if (exactMatch) {\n return { type: \"exact\", value: Number(exactMatch[1]) }\n }\n throw new Error(`Invalid step filter: ${step}`)\n}\n\nexport function parseFilterExpression(expression: string): FilterCondition {\n const trimmed = expression.trim()\n const operatorMatch = trimmed.match(/^\\.([a-zA-Z_][\\w.[\\]]*)\\s*(==|!=|>=|<=|>|<)\\s*(.+)$/)\n if (!operatorMatch) {\n throw new Error(`Invalid filter expression: ${expression}`)\n }\n const [, fieldPath, operator, rawValue] = operatorMatch\n const trimmedValue = rawValue.trim()\n if (trimmedValue === \"\") {\n throw new Error(`Missing value in filter expression: ${expression}`)\n }\n const field = parseFieldPath(fieldPath)\n const value = parseValue(trimmedValue)\n return { field, operator: operator as FilterCondition[\"operator\"], value }\n}\n\nfunction parseFieldPath(path: string): string[] {\n const parts: string[] = []\n let current = \"\"\n let i = 0\n while (i < path.length) {\n if (path[i] === \".\") {\n if (current) {\n parts.push(current)\n current = \"\"\n }\n i++\n } else if (path[i] === \"[\" && path[i + 1] === \"]\") {\n if (current) {\n parts.push(current)\n current = \"\"\n }\n parts.push(\"*\")\n i += 2\n } else {\n current += path[i]\n i++\n }\n }\n if (current) {\n parts.push(current)\n }\n return parts\n}\n\nfunction parseValue(raw: string): string | number | boolean {\n if (raw === \"true\") return true\n if (raw === \"false\") return false\n if (raw.startsWith('\"') && raw.endsWith('\"')) {\n return raw.slice(1, -1)\n }\n if (raw.startsWith(\"'\") && raw.endsWith(\"'\")) {\n return raw.slice(1, -1)\n }\n const num = Number(raw)\n if (!Number.isNaN(num)) {\n return num\n }\n return raw\n}\n\nexport function evaluateCondition(event: RunEvent, condition: FilterCondition): boolean {\n const { field, operator, value } = condition\n const actualValue = getFieldValue(event, field)\n if (actualValue === undefined) {\n return false\n }\n if (Array.isArray(actualValue)) {\n return actualValue.some((v) => compareValues(v, operator, value))\n }\n return compareValues(actualValue, operator, value)\n}\n\nfunction getFieldValue(obj: unknown, path: string[]): unknown {\n let current: unknown = obj\n for (let i = 0; i < path.length; i++) {\n const segment = path[i]\n if (current === null || current === undefined) {\n return undefined\n }\n if (segment === \"*\") {\n if (!Array.isArray(current)) {\n return undefined\n }\n const remainingPath = path.slice(i + 1)\n if (remainingPath.length === 0) {\n return current\n }\n return current\n .map((item) => getFieldValue(item, remainingPath))\n .filter((v) => v !== undefined)\n }\n if (typeof current !== \"object\") {\n return undefined\n }\n current = (current as Record<string, unknown>)[segment]\n }\n return current\n}\n\nfunction compareValues(\n actual: unknown,\n operator: FilterCondition[\"operator\"],\n expected: string | number | boolean,\n): boolean {\n switch (operator) {\n case \"==\":\n return actual === expected\n case \"!=\":\n return actual !== expected\n case \">\":\n return typeof actual === \"number\" && typeof expected === \"number\" && actual > expected\n case \">=\":\n return typeof actual === \"number\" && typeof expected === \"number\" && actual >= expected\n case \"<\":\n return typeof actual === \"number\" && typeof expected === \"number\" && actual < expected\n case \"<=\":\n return typeof actual === \"number\" && typeof expected === \"number\" && actual <= expected\n default:\n return false\n }\n}\n\nfunction matchesStepFilter(stepNumber: number, filter: StepFilter): boolean {\n switch (filter.type) {\n case \"exact\":\n return stepNumber === filter.value\n case \"gt\":\n return filter.value !== undefined && stepNumber > filter.value\n case \"gte\":\n return filter.value !== undefined && stepNumber >= filter.value\n case \"lt\":\n return filter.value !== undefined && stepNumber < filter.value\n case \"lte\":\n return filter.value !== undefined && stepNumber <= filter.value\n case \"range\":\n return (\n filter.min !== undefined &&\n filter.max !== undefined &&\n stepNumber >= filter.min &&\n stepNumber <= filter.max\n )\n default:\n return true\n }\n}\n\nexport type ApplyFiltersResult = {\n events: RunEvent[]\n totalBeforePagination: number\n matchedAfterPagination: number\n}\n\nexport function applyFilters(events: RunEvent[], options: FilterOptions): ApplyFiltersResult {\n let filtered = events\n if (options.step) {\n filtered = filtered.filter((e) => matchesStepFilter(e.stepNumber, options.step as StepFilter))\n }\n if (options.type) {\n filtered = filtered.filter((e) => e.type === options.type)\n }\n if (options.errors) {\n filtered = filtered.filter((e) => ERROR_EVENT_TYPES.has(e.type))\n }\n if (options.tools) {\n filtered = filtered.filter((e) => TOOL_EVENT_TYPES.has(e.type))\n }\n if (options.delegations) {\n filtered = filtered.filter((e) => DELEGATION_EVENT_TYPES.has(e.type))\n }\n if (options.filterExpression) {\n filtered = filtered.filter((e) =>\n evaluateCondition(e, options.filterExpression as FilterCondition),\n )\n }\n // Record total count before pagination\n const totalBeforePagination = filtered.length\n // Apply offset and take (pagination)\n const offset = options.offset ?? 0\n if (offset > 0) {\n filtered = filtered.slice(offset)\n }\n if (options.take !== undefined && options.take > 0) {\n filtered = filtered.slice(0, options.take)\n }\n // Record matched count after pagination (before context is added)\n const matchedAfterPagination = filtered.length\n // Add context events after pagination to preserve matched events\n if (options.context !== undefined && options.context > 0) {\n filtered = addContextEvents(events, filtered, options.context)\n }\n return { events: filtered, totalBeforePagination, matchedAfterPagination }\n}\n\nfunction addContextEvents(\n allEvents: RunEvent[],\n matchedEvents: RunEvent[],\n contextSize: number,\n): RunEvent[] {\n const matchedIds = new Set(matchedEvents.map((e) => e.id))\n const resultIds = new Set<string>()\n for (const event of matchedEvents) {\n const index = allEvents.findIndex((e) => e.id === event.id)\n if (index === -1) continue\n const start = Math.max(0, index - contextSize)\n const end = Math.min(allEvents.length - 1, index + contextSize)\n for (let i = start; i <= end; i++) {\n resultIds.add(allEvents[i].id)\n }\n }\n return allEvents.filter((e) => resultIds.has(e.id) || matchedIds.has(e.id))\n}\n","import type { Checkpoint, Job, RunEvent } from \"@perstack/core\"\nimport { DELEGATION_EVENT_TYPES, ERROR_EVENT_TYPES, TOOL_EVENT_TYPES } from \"./filter.js\"\nimport type { FormatterOptions, LogOutput, LogSummary } from \"./types.js\"\n\nexport function createSummary(events: RunEvent[]): LogSummary {\n if (events.length === 0) {\n return {\n totalEvents: 0,\n errorCount: 0,\n toolCallCount: 0,\n delegationCount: 0,\n }\n }\n const stepNumbers = events.map((e) => e.stepNumber)\n return {\n totalEvents: events.length,\n errorCount: events.filter((e) => ERROR_EVENT_TYPES.has(e.type)).length,\n toolCallCount: events.filter((e) => TOOL_EVENT_TYPES.has(e.type)).length,\n delegationCount: events.filter((e) => DELEGATION_EVENT_TYPES.has(e.type)).length,\n stepRange: { min: Math.min(...stepNumbers), max: Math.max(...stepNumbers) },\n }\n}\n\nexport function formatJson(output: LogOutput, options: FormatterOptions): string {\n const data: Record<string, unknown> = {\n job: output.job,\n events: output.events,\n summary: output.summary,\n }\n // Include optional fields when present\n if (output.checkpoint) {\n data.checkpoint = output.checkpoint\n }\n if (output.checkpoints && output.checkpoints.length > 0) {\n data.checkpoints = output.checkpoints\n }\n if (output.isLatestJob) {\n data.isLatestJob = true\n }\n if (output.storagePath) {\n data.storagePath = output.storagePath\n }\n if (output.totalEventsBeforeLimit !== undefined) {\n data.totalEventsBeforeLimit = output.totalEventsBeforeLimit\n }\n if (output.matchedAfterPagination !== undefined) {\n data.matchedAfterPagination = output.matchedAfterPagination\n }\n if (options.pretty) {\n return JSON.stringify(data, null, 2)\n }\n return JSON.stringify(data)\n}\n\nexport function formatTerminal(output: LogOutput, options: FormatterOptions): string {\n const lines: string[] = []\n // Show context information\n if (output.isLatestJob) {\n lines.push(\"(showing latest job)\")\n lines.push(\"\")\n }\n if (output.storagePath) {\n lines.push(`Storage: ${output.storagePath}`)\n lines.push(\"\")\n }\n if (output.job) {\n lines.push(...formatJobHeader(output.job))\n lines.push(\"\")\n }\n if (output.checkpoint && options.messages) {\n lines.push(...formatCheckpointWithMessages(output.checkpoint))\n lines.push(\"\")\n } else if (output.checkpoint) {\n lines.push(...formatCheckpointHeader(output.checkpoint))\n lines.push(\"\")\n }\n if (options.summary && output.summary) {\n lines.push(...formatSummarySection(output.summary))\n lines.push(\"\")\n }\n if (output.events.length > 0) {\n lines.push(\"Events:\")\n lines.push(\"─\".repeat(50))\n for (const event of output.events) {\n lines.push(...formatEvent(event, options.verbose))\n }\n lines.push(\"─\".repeat(50))\n // Show pagination info if events were truncated\n // Use matchedAfterPagination to compare with totalBeforeLimit, not events.length\n // (events.length may include context events which could exceed matchedAfterPagination)\n if (\n output.totalEventsBeforeLimit !== undefined &&\n output.matchedAfterPagination !== undefined &&\n output.totalEventsBeforeLimit > output.matchedAfterPagination\n ) {\n const contextNote =\n output.events.length > output.matchedAfterPagination\n ? ` (+${output.events.length - output.matchedAfterPagination} context)`\n : \"\"\n lines.push(\n `(showing ${output.matchedAfterPagination} of ${output.totalEventsBeforeLimit} matched events${contextNote})`,\n )\n lines.push(`Use --take and --offset to paginate, or --take 0 for all`)\n }\n } else if (output.totalEventsBeforeLimit !== undefined && output.totalEventsBeforeLimit > 0) {\n lines.push(`(${output.totalEventsBeforeLimit} events available, use --offset to view)`)\n }\n return lines.join(\"\\n\")\n}\n\nfunction formatJobHeader(job: Job): string[] {\n const lines: string[] = []\n lines.push(`Job: ${job.id} (${job.status})`)\n lines.push(`Expert: ${job.coordinatorExpertKey}`)\n lines.push(`Started: ${formatTimestamp(job.startedAt)}`)\n lines.push(`Steps: ${job.totalSteps}`)\n if (job.finishedAt) {\n lines.push(`Finished: ${formatTimestamp(job.finishedAt)}`)\n }\n return lines\n}\n\nfunction formatCheckpointHeader(checkpoint: Checkpoint): string[] {\n const lines: string[] = []\n lines.push(`Checkpoint: ${checkpoint.id}`)\n lines.push(`Status: ${checkpoint.status}`)\n lines.push(`Step: ${checkpoint.stepNumber}`)\n lines.push(`Expert: ${checkpoint.expert.key}`)\n return lines\n}\n\nfunction formatCheckpointWithMessages(checkpoint: Checkpoint): string[] {\n const lines: string[] = []\n lines.push(...formatCheckpointHeader(checkpoint))\n lines.push(\"\")\n lines.push(\"Messages:\")\n for (const msg of checkpoint.messages) {\n const content = extractTextContent(msg.contents)\n const preview = content.length > 100 ? `${content.slice(0, 100)}...` : content\n lines.push(` [${msg.type}] ${preview}`)\n }\n return lines\n}\n\nfunction formatSummarySection(summary: LogSummary): string[] {\n const lines: string[] = []\n lines.push(\"Summary:\")\n lines.push(` Total Events: ${summary.totalEvents}`)\n lines.push(` Errors: ${summary.errorCount}`)\n lines.push(` Tool Calls: ${summary.toolCallCount}`)\n lines.push(` Delegations: ${summary.delegationCount}`)\n if (summary.stepRange) {\n lines.push(` Step Range: ${summary.stepRange.min} - ${summary.stepRange.max}`)\n }\n return lines\n}\n\nfunction formatEvent(event: RunEvent, verbose: boolean): string[] {\n const lines: string[] = []\n const time = formatTime(event.timestamp)\n const header = `[Step ${event.stepNumber}] ${event.type}${\" \".repeat(Math.max(0, 24 - event.type.length))}${time}`\n lines.push(header)\n if (event.type === \"startRun\" && \"inputMessages\" in event) {\n const startEvent = event as { inputMessages: Array<{ type: string; contents: unknown[] }> }\n const userMsg = startEvent.inputMessages.find((m) => m.type === \"userMessage\")\n if (userMsg) {\n const text = extractTextContent(userMsg.contents)\n const preview = text.length > 60 ? `${text.slice(0, 60)}...` : text\n lines.push(` Query: \"${preview}\"`)\n }\n }\n if (event.type === \"callTools\" && \"toolCalls\" in event) {\n const toolEvent = event as {\n toolCalls: Array<{ toolName: string; skillName: string; args: Record<string, unknown> }>\n }\n if (verbose) {\n for (const tc of toolEvent.toolCalls) {\n lines.push(` [${tc.skillName}] ${tc.toolName}`)\n lines.push(` Args: ${JSON.stringify(tc.args)}`)\n }\n } else {\n const toolNames = toolEvent.toolCalls.map((tc) => tc.toolName).join(\", \")\n lines.push(` Tools: ${toolNames}`)\n }\n }\n if (event.type === \"resolveToolResults\" && \"toolResults\" in event) {\n const resultEvent = event as { toolResults: Array<{ toolName: string; result: unknown[] }> }\n for (const tr of resultEvent.toolResults) {\n const text = extractTextContent(tr.result)\n const isError = text.toLowerCase().startsWith(\"error\")\n const symbol = isError ? \"✗\" : \"✓\"\n const preview = text.length > 40 ? `${text.slice(0, 40)}...` : text\n lines.push(` ${symbol} ${tr.toolName}: ${preview}`)\n }\n }\n if (event.type === \"stopRunByError\" && \"error\" in event) {\n const errorEvent = event as { error: { name: string; message: string; isRetryable: boolean } }\n lines.push(` Error: ${errorEvent.error.name}`)\n lines.push(` Message: ${errorEvent.error.message}`)\n lines.push(` Retryable: ${errorEvent.error.isRetryable}`)\n }\n if (event.type === \"stopRunByDelegate\" && \"checkpoint\" in event) {\n const delegateEvent = event as {\n checkpoint: { delegateTo?: Array<{ expert: { key: string }; query: string }> }\n }\n for (const d of delegateEvent.checkpoint.delegateTo ?? []) {\n lines.push(` Delegate to: ${d.expert.key}`)\n }\n }\n if (event.type === \"completeRun\" && \"text\" in event) {\n const completeEvent = event as { text: string }\n const preview =\n completeEvent.text.length > 80 ? `${completeEvent.text.slice(0, 80)}...` : completeEvent.text\n lines.push(` Result: ${preview}`)\n }\n if (event.type === \"retry\" && \"reason\" in event) {\n const retryEvent = event as { reason: string }\n lines.push(` Reason: ${retryEvent.reason}`)\n }\n lines.push(\"\")\n return lines\n}\n\nfunction extractTextContent(contents: unknown[]): string {\n if (!Array.isArray(contents)) return \"\"\n for (const c of contents) {\n if (\n typeof c === \"object\" &&\n c !== null &&\n \"type\" in c &&\n c.type === \"textPart\" &&\n \"text\" in c\n ) {\n return String(c.text)\n }\n }\n return \"\"\n}\n\nfunction formatTimestamp(ts: number): string {\n const date = new Date(ts)\n return date\n .toISOString()\n .replace(\"T\", \" \")\n .replace(/\\.\\d{3}Z$/, \"\")\n}\n\nfunction formatTime(ts: number): string {\n const date = new Date(ts)\n return date.toISOString().slice(11, 19)\n}\n","import { Command } from \"commander\"\nimport {\n applyFilters,\n createLogDataFetcher,\n createStorageAdapter,\n createSummary,\n type FilterOptions,\n type FormatterOptions,\n formatJson,\n formatTerminal,\n type LogCommandOptions,\n type LogOutput,\n parseFilterExpression,\n parseStepFilter,\n} from \"./lib/log/index.js\"\n\nconst DEFAULT_TAKE = 100\nconst DEFAULT_OFFSET = 0\n\nfunction parsePositiveInt(val: string, optionName: string): number {\n const parsed = parseInt(val, 10)\n if (Number.isNaN(parsed)) {\n throw new Error(`Invalid value for ${optionName}: \"${val}\" is not a valid number`)\n }\n if (parsed < 0) {\n throw new Error(`Invalid value for ${optionName}: \"${val}\" must be non-negative`)\n }\n return parsed\n}\n\nexport const logCommand = new Command()\n .command(\"log\")\n .description(\"View execution history and events for debugging\")\n .option(\"--job <jobId>\", \"Show events for a specific job\")\n .option(\"--run <runId>\", \"Show events for a specific run\")\n .option(\"--checkpoint <checkpointId>\", \"Show checkpoint details\")\n .option(\"--step <step>\", \"Filter by step number (e.g., 5, >5, 1-10)\")\n .option(\"--type <type>\", \"Filter by event type\")\n .option(\"--errors\", \"Show error-related events only\")\n .option(\"--tools\", \"Show tool call events only\")\n .option(\"--delegations\", \"Show delegation events only\")\n .option(\"--filter <expression>\", \"Simple filter expression\")\n .option(\"--json\", \"Output as JSON\")\n .option(\"--pretty\", \"Pretty-print JSON output\")\n .option(\"--verbose\", \"Show full event details\")\n .option(\n \"--take <n>\",\n `Number of events to display (default: ${DEFAULT_TAKE}, use 0 for all)`,\n (val) => parsePositiveInt(val, \"--take\"),\n )\n .option(\"--offset <n>\", `Number of events to skip (default: ${DEFAULT_OFFSET})`, (val) =>\n parsePositiveInt(val, \"--offset\"),\n )\n .option(\"--context <n>\", \"Include N events before/after matches\", (val) =>\n parsePositiveInt(val, \"--context\"),\n )\n .option(\"--messages\", \"Show message history for checkpoint\")\n .option(\"--summary\", \"Show summarized view\")\n .action(async (options: LogCommandOptions) => {\n try {\n const storagePath = process.env.PERSTACK_STORAGE_PATH ?? `${process.cwd()}/perstack`\n const adapter = createStorageAdapter(storagePath)\n const fetcher = createLogDataFetcher(adapter)\n const filterOptions = buildFilterOptions(options)\n const formatterOptions = buildFormatterOptions(options)\n const output = await buildOutput(fetcher, options, filterOptions, storagePath)\n if (!output) {\n console.log(\"No data found\")\n return\n }\n const formatted = formatterOptions.json\n ? formatJson(output, formatterOptions)\n : formatTerminal(output, formatterOptions)\n console.log(formatted)\n } catch (error) {\n if (error instanceof Error) {\n console.error(`Error: ${error.message}`)\n } else {\n console.error(\"An unexpected error occurred\")\n }\n process.exit(1)\n }\n })\n\nfunction buildFilterOptions(options: LogCommandOptions): FilterOptions {\n const filterOptions: FilterOptions = {}\n if (options.step) {\n filterOptions.step = parseStepFilter(options.step)\n }\n if (options.type) {\n filterOptions.type = options.type\n }\n if (options.errors) {\n filterOptions.errors = true\n }\n if (options.tools) {\n filterOptions.tools = true\n }\n if (options.delegations) {\n filterOptions.delegations = true\n }\n if (options.filter) {\n filterOptions.filterExpression = parseFilterExpression(options.filter)\n }\n // --take 0 means no limit (show all)\n const take = options.take ?? DEFAULT_TAKE\n if (take > 0) {\n filterOptions.take = take\n }\n filterOptions.offset = options.offset ?? DEFAULT_OFFSET\n if (options.context !== undefined) {\n filterOptions.context = options.context\n }\n return filterOptions\n}\n\nfunction buildFormatterOptions(options: LogCommandOptions): FormatterOptions {\n return {\n json: options.json ?? false,\n pretty: options.pretty ?? false,\n verbose: options.verbose ?? false,\n messages: options.messages ?? false,\n summary: options.summary ?? false,\n }\n}\n\nasync function buildOutput(\n fetcher: ReturnType<typeof createLogDataFetcher>,\n options: LogCommandOptions,\n filterOptions: FilterOptions,\n storagePath: string,\n): Promise<LogOutput | null> {\n if (options.checkpoint) {\n const jobId = options.job\n if (!jobId) {\n const latestJob = await fetcher.getLatestJob()\n if (!latestJob) {\n return null\n }\n const checkpoint = await fetcher.getCheckpoint(latestJob.id, options.checkpoint)\n const events = await fetcher.getEvents(latestJob.id, checkpoint.runId)\n const result = applyFilters(events, filterOptions)\n return {\n job: latestJob,\n checkpoint,\n events: result.events,\n summary: createSummary(result.events),\n isLatestJob: true,\n storagePath,\n totalEventsBeforeLimit: result.totalBeforePagination,\n matchedAfterPagination: result.matchedAfterPagination,\n }\n }\n const job = await fetcher.getJob(jobId)\n if (!job) {\n return null\n }\n const checkpoint = await fetcher.getCheckpoint(jobId, options.checkpoint)\n const events = await fetcher.getEvents(jobId, checkpoint.runId)\n const result = applyFilters(events, filterOptions)\n return {\n job,\n checkpoint,\n events: result.events,\n summary: createSummary(result.events),\n storagePath,\n totalEventsBeforeLimit: result.totalBeforePagination,\n matchedAfterPagination: result.matchedAfterPagination,\n }\n }\n if (options.run) {\n const jobId = options.job\n if (!jobId) {\n const latestJob = await fetcher.getLatestJob()\n if (!latestJob) {\n return null\n }\n const events = await fetcher.getEvents(latestJob.id, options.run)\n const result = applyFilters(events, filterOptions)\n return {\n job: latestJob,\n events: result.events,\n summary: createSummary(result.events),\n isLatestJob: true,\n storagePath,\n totalEventsBeforeLimit: result.totalBeforePagination,\n matchedAfterPagination: result.matchedAfterPagination,\n }\n }\n const job = await fetcher.getJob(jobId)\n if (!job) {\n return null\n }\n const events = await fetcher.getEvents(jobId, options.run)\n const result = applyFilters(events, filterOptions)\n return {\n job,\n events: result.events,\n summary: createSummary(result.events),\n storagePath,\n totalEventsBeforeLimit: result.totalBeforePagination,\n matchedAfterPagination: result.matchedAfterPagination,\n }\n }\n if (options.job) {\n const job = await fetcher.getJob(options.job)\n if (!job) {\n return null\n }\n const events = await fetcher.getAllEventsForJob(options.job)\n const result = applyFilters(events, filterOptions)\n const checkpoints = await fetcher.getCheckpoints(options.job)\n return {\n job,\n checkpoints,\n events: result.events,\n summary: createSummary(result.events),\n storagePath,\n totalEventsBeforeLimit: result.totalBeforePagination,\n matchedAfterPagination: result.matchedAfterPagination,\n }\n }\n const latestJob = await fetcher.getLatestJob()\n if (!latestJob) {\n return null\n }\n const events = await fetcher.getAllEventsForJob(latestJob.id)\n const result = applyFilters(events, filterOptions)\n return {\n job: latestJob,\n events: result.events,\n summary: createSummary(result.events),\n isLatestJob: true,\n storagePath,\n totalEventsBeforeLimit: result.totalBeforePagination,\n matchedAfterPagination: result.matchedAfterPagination,\n }\n}\n","import type { ProviderConfig, ProviderName, ProviderTable } from \"@perstack/core\"\n\ntype SettingRecord = Record<string, unknown>\n\nexport function getProviderConfig(\n provider: ProviderName,\n env: Record<string, string>,\n providerTable?: ProviderTable,\n): ProviderConfig {\n const setting = (providerTable?.setting ?? {}) as SettingRecord\n switch (provider) {\n case \"anthropic\": {\n const apiKey = env.ANTHROPIC_API_KEY\n if (!apiKey) throw new Error(\"ANTHROPIC_API_KEY is not set\")\n return {\n providerName: \"anthropic\",\n apiKey,\n baseUrl: (setting.baseUrl as string | undefined) ?? env.ANTHROPIC_BASE_URL,\n headers: setting.headers as Record<string, string> | undefined,\n }\n }\n case \"google\": {\n const apiKey = env.GOOGLE_GENERATIVE_AI_API_KEY\n if (!apiKey) throw new Error(\"GOOGLE_GENERATIVE_AI_API_KEY is not set\")\n return {\n providerName: \"google\",\n apiKey,\n baseUrl: (setting.baseUrl as string | undefined) ?? env.GOOGLE_GENERATIVE_AI_BASE_URL,\n headers: setting.headers as Record<string, string> | undefined,\n }\n }\n case \"openai\": {\n const apiKey = env.OPENAI_API_KEY\n if (!apiKey) throw new Error(\"OPENAI_API_KEY is not set\")\n return {\n providerName: \"openai\",\n apiKey,\n baseUrl: (setting.baseUrl as string | undefined) ?? env.OPENAI_BASE_URL,\n organization: (setting.organization as string | undefined) ?? env.OPENAI_ORGANIZATION,\n project: (setting.project as string | undefined) ?? env.OPENAI_PROJECT,\n name: setting.name as string | undefined,\n headers: setting.headers as Record<string, string> | undefined,\n }\n }\n case \"ollama\": {\n return {\n providerName: \"ollama\",\n baseUrl: (setting.baseUrl as string | undefined) ?? env.OLLAMA_BASE_URL,\n headers: setting.headers as Record<string, string> | undefined,\n }\n }\n case \"azure-openai\": {\n const apiKey = env.AZURE_API_KEY\n if (!apiKey) throw new Error(\"AZURE_API_KEY is not set\")\n const resourceName = (setting.resourceName as string | undefined) ?? env.AZURE_RESOURCE_NAME\n const baseUrl = (setting.baseUrl as string | undefined) ?? env.AZURE_BASE_URL\n if (!resourceName && !baseUrl) throw new Error(\"AZURE_RESOURCE_NAME or baseUrl is not set\")\n return {\n providerName: \"azure-openai\",\n apiKey,\n resourceName,\n apiVersion: (setting.apiVersion as string | undefined) ?? env.AZURE_API_VERSION,\n baseUrl,\n headers: setting.headers as Record<string, string> | undefined,\n useDeploymentBasedUrls: setting.useDeploymentBasedUrls as boolean | undefined,\n }\n }\n case \"amazon-bedrock\": {\n const accessKeyId = env.AWS_ACCESS_KEY_ID\n const secretAccessKey = env.AWS_SECRET_ACCESS_KEY\n const sessionToken = env.AWS_SESSION_TOKEN\n if (!accessKeyId) throw new Error(\"AWS_ACCESS_KEY_ID is not set\")\n if (!secretAccessKey) throw new Error(\"AWS_SECRET_ACCESS_KEY is not set\")\n const region = (setting.region as string | undefined) ?? env.AWS_REGION\n if (!region) throw new Error(\"AWS_REGION is not set\")\n return {\n providerName: \"amazon-bedrock\",\n accessKeyId,\n secretAccessKey,\n region,\n sessionToken,\n }\n }\n case \"google-vertex\": {\n return {\n providerName: \"google-vertex\",\n project: (setting.project as string | undefined) ?? env.GOOGLE_VERTEX_PROJECT,\n location: (setting.location as string | undefined) ?? env.GOOGLE_VERTEX_LOCATION,\n baseUrl: (setting.baseUrl as string | undefined) ?? env.GOOGLE_VERTEX_BASE_URL,\n headers: setting.headers as Record<string, string> | undefined,\n }\n }\n case \"deepseek\": {\n const apiKey = env.DEEPSEEK_API_KEY\n if (!apiKey) throw new Error(\"DEEPSEEK_API_KEY is not set\")\n return {\n providerName: \"deepseek\",\n apiKey,\n baseUrl: (setting.baseUrl as string | undefined) ?? env.DEEPSEEK_BASE_URL,\n headers: setting.headers as Record<string, string> | undefined,\n }\n }\n }\n}\n","import { existsSync, readFileSync } from \"node:fs\"\nimport type { Checkpoint, Job, RunEvent, RunSetting } from \"@perstack/core\"\nimport { checkpointSchema } from \"@perstack/core\"\nimport {\n getCheckpointPath,\n getRunIdsByJobId,\n getAllJobs as runtimeGetAllJobs,\n getAllRuns as runtimeGetAllRuns,\n getCheckpointsByJobId as runtimeGetCheckpointsByJobId,\n getEventContents as runtimeGetEventContents,\n} from \"@perstack/filesystem-storage\"\n\nexport function getAllJobs(): Job[] {\n return runtimeGetAllJobs()\n}\n\nexport function getAllRuns(): RunSetting[] {\n return runtimeGetAllRuns()\n}\n\nexport function getMostRecentRun(): RunSetting {\n const runs = getAllRuns()\n if (runs.length === 0) {\n throw new Error(\"No runs found\")\n }\n return runs[0]\n}\n\nexport function getCheckpointsByJobId(jobId: string): Checkpoint[] {\n return runtimeGetCheckpointsByJobId(jobId)\n}\n\nexport function getMostRecentCheckpoint(jobId?: string): Checkpoint {\n const targetJobId = jobId ?? getMostRecentRun().jobId\n const checkpoints = getCheckpointsByJobId(targetJobId)\n if (checkpoints.length === 0) {\n throw new Error(`No checkpoints found for job ${targetJobId}`)\n }\n return checkpoints[checkpoints.length - 1]\n}\n\nexport function getRecentExperts(\n limit: number,\n): Array<{ key: string; name: string; lastUsed: number }> {\n const runs = getAllRuns()\n const expertMap = new Map<string, { key: string; name: string; lastUsed: number }>()\n for (const setting of runs) {\n const expertKey = setting.expertKey\n if (!expertMap.has(expertKey) || expertMap.get(expertKey)!.lastUsed < setting.updatedAt) {\n expertMap.set(expertKey, {\n key: expertKey,\n name: expertKey,\n lastUsed: setting.updatedAt,\n })\n }\n }\n return Array.from(expertMap.values())\n .sort((a, b) => b.lastUsed - a.lastUsed)\n .slice(0, limit)\n}\n\nexport function getCheckpointById(jobId: string, checkpointId: string): Checkpoint {\n const checkpointPath = getCheckpointPath(jobId, checkpointId)\n if (!existsSync(checkpointPath)) {\n throw new Error(`Checkpoint ${checkpointId} not found in job ${jobId}`)\n }\n const checkpoint = readFileSync(checkpointPath, \"utf-8\")\n return checkpointSchema.parse(JSON.parse(checkpoint))\n}\n\nexport function getCheckpointsWithDetails(\n jobId: string,\n): { id: string; runId: string; stepNumber: number; contextWindowUsage: number }[] {\n return getCheckpointsByJobId(jobId)\n .map((cp) => ({\n id: cp.id,\n runId: cp.runId,\n stepNumber: cp.stepNumber,\n contextWindowUsage: cp.contextWindowUsage ?? 0,\n }))\n .sort((a, b) => b.stepNumber - a.stepNumber)\n}\n\nexport function getEventContents(jobId: string, runId: string, maxStepNumber?: number): RunEvent[] {\n return runtimeGetEventContents(jobId, runId, maxStepNumber)\n}\n\nexport function getAllEventContentsForJob(jobId: string, maxStepNumber?: number): RunEvent[] {\n const runIds = getRunIdsByJobId(jobId)\n const allEvents: RunEvent[] = []\n for (const runId of runIds) {\n const events = runtimeGetEventContents(jobId, runId, maxStepNumber)\n allEvents.push(...events)\n }\n return allEvents.sort((a, b) => a.timestamp - b.timestamp)\n}\n","import type { Checkpoint, PerstackConfig, ProviderConfig, ProviderName } from \"@perstack/core\"\nimport { getEnv } from \"./get-env.js\"\nimport { getPerstackConfig } from \"./perstack-toml.js\"\nimport { getProviderConfig } from \"./provider-config.js\"\nimport { getCheckpointById, getMostRecentCheckpoint } from \"./run-manager.js\"\n\nconst defaultProvider: ProviderName = \"anthropic\"\nconst defaultModel = \"claude-sonnet-4-5\"\n\nexport type ExpertConfig = NonNullable<PerstackConfig[\"experts\"]>[string]\n\nexport type RunContext = {\n perstackConfig: PerstackConfig\n checkpoint: Checkpoint | undefined\n env: Record<string, string>\n providerConfig: ProviderConfig\n model: string\n experts: Record<string, ExpertConfig & { name: string; version: string }>\n}\n\nexport type ResolveRunContextInput = {\n configPath?: string\n provider?: string\n model?: string\n envPath?: string[]\n continue?: boolean\n continueJob?: string\n resumeFrom?: string\n expertKey?: string\n}\n\nexport async function resolveRunContext(input: ResolveRunContextInput): Promise<RunContext> {\n const perstackConfig = await getPerstackConfig(input.configPath)\n let checkpoint: Checkpoint | undefined\n if (input.resumeFrom) {\n if (!input.continueJob) {\n throw new Error(\"--resume-from requires --continue-job\")\n }\n checkpoint = getCheckpointById(input.continueJob, input.resumeFrom)\n } else if (input.continueJob) {\n checkpoint = getMostRecentCheckpoint(input.continueJob)\n } else if (input.continue) {\n checkpoint = getMostRecentCheckpoint()\n }\n if ((input.continue || input.continueJob || input.resumeFrom) && !checkpoint) {\n throw new Error(\"No checkpoint found\")\n }\n\n if (checkpoint && input.expertKey && checkpoint.expert.key !== input.expertKey) {\n throw new Error(\n `Checkpoint expert key ${checkpoint.expert.key} does not match input expert key ${input.expertKey}`,\n )\n }\n\n const envPath =\n input.envPath && input.envPath.length > 0\n ? input.envPath\n : (perstackConfig.envPath ?? [\".env\", \".env.local\"])\n const env = getEnv(envPath)\n const provider = (input.provider ??\n perstackConfig.provider?.providerName ??\n defaultProvider) as ProviderName\n const model = input.model ?? perstackConfig.model ?? defaultModel\n const providerConfig = getProviderConfig(provider, env, perstackConfig.provider)\n\n const experts = Object.fromEntries(\n Object.entries(perstackConfig.experts ?? {}).map(([name, expert]) => {\n return [\n name,\n {\n name,\n version: expert.version ?? \"1.0.0\",\n description: expert.description,\n instruction: expert.instruction,\n skills: expert.skills,\n delegates: expert.delegates,\n tags: expert.tags,\n },\n ]\n }),\n )\n\n return {\n perstackConfig,\n checkpoint,\n env,\n providerConfig,\n model,\n experts: experts as Record<string, ExpertConfig & { name: string; version: string }>,\n }\n}\n","import type { Checkpoint } from \"@perstack/core\"\n\ntype InteractiveToolCallResult = {\n toolCallId: string\n toolName: string\n skillName: string\n text: string\n}\nexport function parseInteractiveToolCallResult(\n query: string,\n checkpoint: Checkpoint,\n): {\n interactiveToolCallResult: InteractiveToolCallResult\n} {\n const lastMessage = checkpoint.messages[checkpoint.messages.length - 1]\n if (lastMessage.type !== \"expertMessage\") {\n throw new Error(\"Last message is not a expert message\")\n }\n // Find the first toolCallPart (may not be contents[0] if thinkingPart is present)\n const content = lastMessage.contents.find((c) => c.type === \"toolCallPart\")\n if (!content || content.type !== \"toolCallPart\") {\n throw new Error(\"Last message content is not a tool call part\")\n }\n const toolCallId = content.toolCallId\n const toolName = content.toolName\n const pendingToolCall = checkpoint.pendingToolCalls?.find((tc) => tc.id === toolCallId)\n const skillName = pendingToolCall?.skillName ?? \"\"\n return {\n interactiveToolCallResult: {\n toolCallId,\n toolName,\n skillName,\n text: query,\n },\n }\n}\nexport function parseInteractiveToolCallResultJson(\n query: string,\n): { interactiveToolCallResult: InteractiveToolCallResult } | null {\n try {\n const parsed = JSON.parse(query) as unknown\n if (\n typeof parsed === \"object\" &&\n parsed !== null &&\n \"toolCallId\" in parsed &&\n \"toolName\" in parsed &&\n \"skillName\" in parsed &&\n \"text\" in parsed\n ) {\n return {\n interactiveToolCallResult: parsed as InteractiveToolCallResult,\n }\n }\n return null\n } catch {\n return null\n }\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport type { RunEvent, RuntimeEvent } from \"@perstack/core\"\nimport {\n createFilteredEventListener,\n parseWithFriendlyError,\n runCommandInputSchema,\n validateEventFilter,\n} from \"@perstack/core\"\nimport {\n createInitialJob,\n defaultRetrieveCheckpoint,\n defaultStoreCheckpoint,\n defaultStoreEvent,\n retrieveJob,\n storeJob,\n} from \"@perstack/filesystem-storage\"\nimport { findLockfile, loadLockfile, run as perstackRun } from \"@perstack/runtime\"\nimport { Command } from \"commander\"\nimport { resolveRunContext } from \"./lib/context.js\"\nimport {\n parseInteractiveToolCallResult,\n parseInteractiveToolCallResultJson,\n} from \"./lib/interactive.js\"\n\nconst defaultEventListener = (event: RunEvent | RuntimeEvent) => console.log(JSON.stringify(event))\n\nexport const runCommand = new Command()\n .command(\"run\")\n .description(\"Run Perstack with JSON output\")\n .argument(\"<expertKey>\", \"Expert key to run\")\n .argument(\"<query>\", \"Query to run\")\n .option(\"--config <configPath>\", \"Path to perstack.toml config file\")\n .option(\"--provider <provider>\", \"Provider to use\")\n .option(\"--model <model>\", \"Model to use\")\n .option(\n \"--reasoning-budget <budget>\",\n \"Reasoning budget for native LLM reasoning (minimal, low, medium, high, or token count)\",\n )\n .option(\n \"--max-steps <maxSteps>\",\n \"Maximum number of steps to run, default is undefined (no limit)\",\n )\n .option(\"--max-retries <maxRetries>\", \"Maximum number of generation retries, default is 5\")\n .option(\n \"--timeout <timeout>\",\n \"Timeout for each generation in milliseconds, default is 300000 (5 minutes)\",\n )\n .option(\"--job-id <jobId>\", \"Job ID for identifying the job\")\n .option(\n \"--env-path <path>\",\n \"Path to the environment file (can be specified multiple times), default is .env and .env.local\",\n (value: string, previous: string[]) => previous.concat(value),\n [] as string[],\n )\n .option(\"--verbose\", \"Enable verbose logging\")\n .option(\"--continue\", \"Continue the most recent job with new query\")\n .option(\"--continue-job <jobId>\", \"Continue the specified job with new query\")\n .option(\n \"--resume-from <checkpointId>\",\n \"Resume from a specific checkpoint (requires --continue or --continue-job)\",\n )\n .option(\"-i, --interactive-tool-call-result\", \"Query is interactive tool call result\")\n .option(\n \"--filter <types>\",\n \"Filter events by type (comma-separated, e.g., completeRun,stopRunByError)\",\n )\n .action(async (expertKey, query, options) => {\n const input = parseWithFriendlyError(runCommandInputSchema, { expertKey, query, options })\n\n // Validate and apply event filter if specified\n let eventListener = defaultEventListener\n if (input.options.filter && input.options.filter.length > 0) {\n try {\n const validatedTypes = validateEventFilter(input.options.filter)\n const allowedTypes = new Set(validatedTypes)\n eventListener = createFilteredEventListener(defaultEventListener, allowedTypes)\n } catch (error) {\n if (error instanceof Error) {\n console.error(error.message)\n } else {\n console.error(error)\n }\n process.exit(1)\n }\n }\n\n try {\n const { perstackConfig, checkpoint, env, providerConfig, model, experts } =\n await resolveRunContext({\n configPath: input.options.config,\n provider: input.options.provider,\n model: input.options.model,\n envPath: input.options.envPath,\n continue: input.options.continue,\n continueJob: input.options.continueJob,\n resumeFrom: input.options.resumeFrom,\n expertKey: input.expertKey,\n })\n\n // Load lockfile if present\n const lockfilePath = findLockfile()\n const lockfile = lockfilePath ? (loadLockfile(lockfilePath) ?? undefined) : undefined\n\n // Generate job and run IDs\n const jobId = checkpoint?.jobId ?? input.options.jobId ?? createId()\n const runId = createId()\n\n await perstackRun(\n {\n setting: {\n jobId,\n runId,\n expertKey: input.expertKey,\n input: input.options.interactiveToolCallResult\n ? (parseInteractiveToolCallResultJson(input.query) ??\n (checkpoint\n ? parseInteractiveToolCallResult(input.query, checkpoint)\n : { text: input.query }))\n : { text: input.query },\n experts,\n model,\n providerConfig,\n reasoningBudget: input.options.reasoningBudget ?? perstackConfig.reasoningBudget,\n maxSteps: input.options.maxSteps ?? perstackConfig.maxSteps,\n maxRetries: input.options.maxRetries ?? perstackConfig.maxRetries,\n timeout: input.options.timeout ?? perstackConfig.timeout,\n perstackApiBaseUrl: perstackConfig.perstackApiBaseUrl,\n perstackApiKey: env.PERSTACK_API_KEY,\n perstackBaseSkillCommand: perstackConfig.perstackBaseSkillCommand,\n env,\n proxyUrl: process.env.PERSTACK_PROXY_URL,\n verbose: input.options.verbose,\n },\n checkpoint,\n },\n {\n eventListener,\n storeCheckpoint: defaultStoreCheckpoint,\n storeEvent: defaultStoreEvent,\n retrieveCheckpoint: defaultRetrieveCheckpoint,\n storeJob,\n retrieveJob,\n createJob: createInitialJob,\n lockfile,\n },\n )\n } catch (error) {\n if (error instanceof Error) {\n console.error(error.message)\n } else {\n console.error(error)\n }\n process.exit(1)\n }\n })\n","import type { PerstackEvent } from \"../types/index.js\"\n\ntype ErrorLogger = (message: string, error: unknown) => void\nconst defaultErrorLogger: ErrorLogger = (message, error) => {\n console.error(message, error)\n}\ntype EventQueueOptions = {\n onError?: (error: unknown) => void\n errorLogger?: ErrorLogger\n}\nexport class EventQueue {\n private static readonly MAX_PENDING_EVENTS = 1000\n private pendingEvents: PerstackEvent[] = []\n private handler: ((event: PerstackEvent) => void) | null = null\n private readonly onError?: (error: unknown) => void\n private readonly errorLogger: ErrorLogger\n constructor(options?: EventQueueOptions) {\n this.onError = options?.onError\n this.errorLogger = options?.errorLogger ?? defaultErrorLogger\n }\n setHandler(fn: (event: PerstackEvent) => void): void {\n this.handler = fn\n for (const event of this.pendingEvents) {\n this.safeHandle(event)\n }\n this.pendingEvents.length = 0\n }\n emit(event: PerstackEvent): void {\n if (this.handler) {\n this.safeHandle(event)\n } else {\n if (this.pendingEvents.length >= EventQueue.MAX_PENDING_EVENTS) {\n this.pendingEvents.shift()\n }\n this.pendingEvents.push(event)\n }\n }\n private safeHandle(event: PerstackEvent): void {\n try {\n this.handler?.(event)\n } catch (error) {\n if (this.onError) {\n this.onError(error)\n } else {\n this.errorLogger(\"EventQueue handler error:\", error)\n }\n }\n }\n}\n","import { createContext, useContext } from \"react\"\nimport type {\n BrowsingEventsState,\n CheckpointHistoryItem,\n EventHistoryItem,\n JobHistoryItem,\n} from \"../types/index.js\"\nexport type InputAreaContextValue = {\n onExpertSelect: (expertKey: string) => void\n onQuerySubmit: (query: string) => void\n onJobSelect: (job: JobHistoryItem) => void\n onJobResume: (job: JobHistoryItem) => void\n onCheckpointSelect: (checkpoint: CheckpointHistoryItem) => void\n onCheckpointResume: (checkpoint: CheckpointHistoryItem) => void\n onEventSelect: (state: BrowsingEventsState, event: EventHistoryItem) => void\n onBack: () => void\n onSwitchToExperts: () => void\n onSwitchToHistory: () => void\n}\nconst InputAreaContext = createContext<InputAreaContextValue | null>(null)\nexport const InputAreaProvider = InputAreaContext.Provider\nexport const useInputAreaContext = (): InputAreaContextValue => {\n const context = useContext(InputAreaContext)\n if (!context) {\n throw new Error(\"useInputAreaContext must be used within InputAreaProvider\")\n }\n return context\n}\n","export const truncateText = (text: string, maxLength: number): string => {\n if (text.length <= maxLength) return text\n return `${text.slice(0, maxLength)}...`\n}\nexport const assertNever = (x: never): never => {\n throw new Error(`Unexpected value: ${x}`)\n}\nexport const formatTimestamp = (timestamp: number): string => new Date(timestamp).toLocaleString()\nexport const shortenPath = (fullPath: string, maxLength = 60): string => {\n if (fullPath.length <= maxLength) return fullPath\n const parts = fullPath.split(\"/\")\n if (parts.length <= 2) return fullPath\n const filename = parts[parts.length - 1] ?? \"\"\n const parentDir = parts[parts.length - 2] ?? \"\"\n const shortened = `.../${parentDir}/${filename}`\n if (shortened.length <= maxLength) return shortened\n return `.../${filename}`\n}\nexport const summarizeOutput = (\n lines: string[],\n maxLines: number,\n): { visible: string[]; remaining: number } => {\n const filtered = lines.filter((l) => l.trim())\n const visible = filtered.slice(0, maxLines)\n const remaining = filtered.length - visible.length\n return { visible, remaining }\n}\n","import type { RunEvent } from \"@perstack/core\"\n\nexport const UI_CONSTANTS = {\n MAX_VISIBLE_LIST_ITEMS: 25,\n MAX_VISIBLE_EXPERTS_INLINE: 5,\n MAX_EVENTS: 1000,\n TRUNCATE_TEXT_SHORT: 40,\n TRUNCATE_TEXT_MEDIUM: 80,\n TRUNCATE_TEXT_DEFAULT: 100,\n TRUNCATE_TEXT_LONG: 200,\n} as const\n\nexport const RENDER_CONSTANTS = {\n EXEC_OUTPUT_MAX_LINES: 4,\n TODO_MAX_VISIBLE_ITEMS: 5,\n NEW_TODO_MAX_PREVIEW: 3,\n GLOB_MAX_FILES: 4,\n LIST_DIR_MAX_ITEMS: 4,\n} as const\n\nexport const INDICATOR = {\n CHEVRON_RIGHT: \">\",\n BULLET: \"●\",\n TREE: \"└\",\n ELLIPSIS: \"...\",\n} as const\n\nexport const STOP_EVENT_TYPES = [\n \"stopRunByInteractiveTool\",\n \"stopRunByDelegate\",\n \"stopRunByExceededMaxSteps\",\n] as const satisfies readonly RunEvent[\"type\"][]\n\nexport const KEY_BINDINGS = {\n NAVIGATE_UP: \"↑\",\n NAVIGATE_DOWN: \"↓\",\n SELECT: \"Enter\",\n BACK: \"b\",\n ESCAPE: \"Esc\",\n INPUT_MODE: \"i\",\n HISTORY: \"h\",\n NEW: \"n\",\n CHECKPOINTS: \"c\",\n EVENTS: \"e\",\n RESUME: \"Enter\",\n QUIT: \"q\",\n CTRL_QUIT: \"Ctrl+q\",\n} as const\n\nexport const KEY_HINTS = {\n NAVIGATE: `${KEY_BINDINGS.NAVIGATE_UP}${KEY_BINDINGS.NAVIGATE_DOWN}:Navigate`,\n SELECT: `${KEY_BINDINGS.SELECT}:Select`,\n RESUME: `${KEY_BINDINGS.RESUME}:Resume`,\n BACK: `${KEY_BINDINGS.BACK}:Back`,\n CANCEL: `${KEY_BINDINGS.ESCAPE}:Cancel`,\n INPUT: `${KEY_BINDINGS.INPUT_MODE}:Input`,\n HISTORY: `${KEY_BINDINGS.HISTORY}:History`,\n NEW: `${KEY_BINDINGS.NEW}:New Run`,\n CHECKPOINTS: `${KEY_BINDINGS.CHECKPOINTS}:Checkpoints`,\n EVENTS: `${KEY_BINDINGS.EVENTS}:Events`,\n ESC_BACK: `${KEY_BINDINGS.ESCAPE}:Back`,\n QUIT: `${KEY_BINDINGS.QUIT}:Quit`,\n CTRL_QUIT: `${KEY_BINDINGS.CTRL_QUIT}:Quit`,\n CONFIRM: `${KEY_BINDINGS.SELECT}:Confirm`,\n} as const\n","import { type MutableRefObject, useInsertionEffect, useRef } from \"react\"\n\nexport const useLatestRef = <T>(value: T): MutableRefObject<T> => {\n const ref = useRef(value)\n useInsertionEffect(() => {\n ref.current = value\n })\n return ref\n}\n","import type { Key } from \"ink\"\nimport { useCallback, useEffect, useState } from \"react\"\n\ntype UseListNavigationOptions<T> = {\n items: T[]\n onSelect?: (item: T) => void\n onBack?: () => void\n}\ntype UseListNavigationResult = {\n selectedIndex: number\n handleNavigation: (inputChar: string, key: Key) => boolean\n}\nexport const useListNavigation = <T>(\n options: UseListNavigationOptions<T>,\n): UseListNavigationResult => {\n const { items, onSelect, onBack } = options\n const [selectedIndex, setSelectedIndex] = useState(0)\n useEffect(() => {\n if (selectedIndex >= items.length && items.length > 0) {\n setSelectedIndex(items.length - 1)\n }\n }, [items.length, selectedIndex])\n const handleNavigation = useCallback(\n (inputChar: string, key: Key): boolean => {\n if (key.upArrow && items.length > 0) {\n setSelectedIndex((prev) => Math.max(0, prev - 1))\n return true\n }\n if (key.downArrow && items.length > 0) {\n setSelectedIndex((prev) => Math.min(items.length - 1, prev + 1))\n return true\n }\n if (key.return && items[selectedIndex]) {\n onSelect?.(items[selectedIndex])\n return true\n }\n if ((key.escape || inputChar === \"b\") && onBack) {\n onBack()\n return true\n }\n return false\n },\n [items, selectedIndex, onSelect, onBack],\n )\n return { selectedIndex, handleNavigation }\n}\n","import type { Key } from \"ink\"\nimport { useCallback, useState } from \"react\"\nimport { useLatestRef } from \"./use-latest-ref.js\"\n\ntype UseTextInputOptions = {\n onSubmit: (value: string) => void\n onCancel?: () => void\n}\nexport const useTextInput = (options: UseTextInputOptions) => {\n const [input, setInput] = useState(\"\")\n const inputRef = useLatestRef(input)\n const onSubmitRef = useLatestRef(options.onSubmit)\n const onCancelRef = useLatestRef(options.onCancel)\n const handleInput = useCallback(\n (inputChar: string, key: Key): void => {\n if (key.escape) {\n setInput(\"\")\n onCancelRef.current?.()\n return\n }\n if (key.return && inputRef.current.trim()) {\n onSubmitRef.current(inputRef.current.trim())\n setInput(\"\")\n return\n }\n if (key.backspace || key.delete) {\n setInput((prev) => prev.slice(0, -1))\n return\n }\n if (!key.ctrl && !key.meta && inputChar) {\n setInput((prev) => prev + inputChar)\n }\n },\n [inputRef, onSubmitRef, onCancelRef],\n )\n const reset = useCallback(() => {\n setInput(\"\")\n }, [])\n return { input, handleInput, reset }\n}\n","import { useListNavigation } from \"@perstack/tui-components\"\nimport type { Key } from \"ink\"\nimport { Box, Text, useInput } from \"ink\"\nimport type React from \"react\"\nimport { useMemo } from \"react\"\nimport { INDICATOR, UI_CONSTANTS } from \"../constants.js\"\n\ntype ListBrowserProps<T> = {\n title: string\n items: T[]\n renderItem: (item: T, isSelected: boolean, index: number) => React.ReactNode\n onSelect: (item: T) => void\n emptyMessage?: string\n extraKeyHandler?: (char: string, key: Key, selectedItem: T | undefined) => boolean\n onBack?: () => void\n maxItems?: number\n}\nexport const ListBrowser = <T,>({\n title,\n items,\n renderItem,\n onSelect,\n emptyMessage = \"No items found\",\n extraKeyHandler,\n onBack,\n maxItems = UI_CONSTANTS.MAX_VISIBLE_LIST_ITEMS,\n}: ListBrowserProps<T>) => {\n const { selectedIndex, handleNavigation } = useListNavigation({\n items,\n onSelect,\n onBack,\n })\n useInput((inputChar, key) => {\n if (extraKeyHandler?.(inputChar, key, items[selectedIndex])) return\n handleNavigation(inputChar, key)\n })\n const { scrollOffset, displayItems } = useMemo(() => {\n const offset = Math.max(0, Math.min(selectedIndex - maxItems + 1, items.length - maxItems))\n return {\n scrollOffset: offset,\n displayItems: items.slice(offset, offset + maxItems),\n }\n }, [items, selectedIndex, maxItems])\n const hasMoreAbove = scrollOffset > 0\n const hasMoreBelow = scrollOffset + maxItems < items.length\n return (\n <Box flexDirection=\"column\">\n <Box>\n <Text color=\"cyan\">{title}</Text>\n {items.length > maxItems && (\n <Text color=\"gray\">\n {\" \"}\n ({selectedIndex + 1}/{items.length})\n </Text>\n )}\n </Box>\n {hasMoreAbove && <Text color=\"gray\">{INDICATOR.ELLIPSIS}</Text>}\n <Box flexDirection=\"column\">\n {displayItems.length === 0 ? (\n <Text color=\"gray\">{emptyMessage}</Text>\n ) : (\n displayItems.map((item, index) => {\n const actualIndex = scrollOffset + index\n return renderItem(item, actualIndex === selectedIndex, actualIndex)\n })\n )}\n </Box>\n {hasMoreBelow && <Text color=\"gray\">{INDICATOR.ELLIPSIS}</Text>}\n </Box>\n )\n}\nexport type { ListBrowserProps }\n","import { Text } from \"ink\"\nimport { KEY_HINTS } from \"../../constants.js\"\nimport type { CheckpointHistoryItem, JobHistoryItem } from \"../../types/index.js\"\nimport { ListBrowser } from \"../list-browser.js\"\n\nexport type BrowsingCheckpointsInputProps = {\n job: JobHistoryItem\n checkpoints: CheckpointHistoryItem[]\n onCheckpointSelect: (checkpoint: CheckpointHistoryItem) => void\n onCheckpointResume: (checkpoint: CheckpointHistoryItem) => void\n onBack: () => void\n showEventsHint?: boolean\n}\nexport const BrowsingCheckpointsInput = ({\n job,\n checkpoints,\n onCheckpointSelect,\n onCheckpointResume,\n onBack,\n showEventsHint = true,\n}: BrowsingCheckpointsInputProps) => (\n <ListBrowser\n title={`Checkpoints for ${job.expertKey} ${KEY_HINTS.NAVIGATE} ${KEY_HINTS.RESUME} ${showEventsHint ? KEY_HINTS.EVENTS : \"\"} ${KEY_HINTS.BACK}`.trim()}\n items={checkpoints}\n onSelect={onCheckpointResume}\n onBack={onBack}\n emptyMessage=\"No checkpoints found\"\n extraKeyHandler={(char, _key, selected) => {\n if (char === \"e\" && selected) {\n onCheckpointSelect(selected)\n return true\n }\n return false\n }}\n renderItem={(cp, isSelected) => (\n <Text key={cp.id} color={isSelected ? \"cyan\" : \"gray\"}>\n {isSelected ? \">\" : \" \"} Step {cp.stepNumber} ({cp.id})\n </Text>\n )}\n />\n)\n","import { Box, Text, useInput } from \"ink\"\nimport { KEY_HINTS } from \"../../constants.js\"\nimport { formatTimestamp } from \"../../helpers.js\"\nimport type { EventHistoryItem } from \"../../types/index.js\"\n\nexport type BrowsingEventDetailInputProps = {\n event: EventHistoryItem\n onBack: () => void\n}\nexport const BrowsingEventDetailInput = ({ event, onBack }: BrowsingEventDetailInputProps) => {\n useInput((input, key) => {\n if (input === \"b\" || key.escape) {\n onBack()\n }\n })\n return (\n <Box flexDirection=\"column\" paddingX={1}>\n <Box marginBottom={1}>\n <Text bold>Event Detail</Text>\n <Text dimColor> {KEY_HINTS.BACK}</Text>\n </Box>\n <Box flexDirection=\"column\" marginLeft={2}>\n <Text>\n <Text color=\"gray\">Type: </Text>\n <Text color=\"cyan\">{event.type}</Text>\n </Text>\n <Text>\n <Text color=\"gray\">Step: </Text>\n <Text>{event.stepNumber}</Text>\n </Text>\n <Text>\n <Text color=\"gray\">Timestamp: </Text>\n <Text>{formatTimestamp(event.timestamp)}</Text>\n </Text>\n <Text>\n <Text color=\"gray\">ID: </Text>\n <Text dimColor>{event.id}</Text>\n </Text>\n <Text>\n <Text color=\"gray\">Run ID: </Text>\n <Text dimColor>{event.runId}</Text>\n </Text>\n </Box>\n </Box>\n )\n}\n","import { Text } from \"ink\"\nimport { KEY_HINTS } from \"../../constants.js\"\nimport { formatTimestamp } from \"../../helpers.js\"\nimport type { CheckpointHistoryItem, EventHistoryItem } from \"../../types/index.js\"\nimport { ListBrowser } from \"../list-browser.js\"\n\nexport type BrowsingEventsInputProps = {\n checkpoint: CheckpointHistoryItem\n events: EventHistoryItem[]\n onEventSelect: (event: EventHistoryItem) => void\n onBack: () => void\n}\nexport const BrowsingEventsInput = ({\n checkpoint,\n events,\n onEventSelect,\n onBack,\n}: BrowsingEventsInputProps) => (\n <ListBrowser\n title={`Events for Step ${checkpoint.stepNumber} ${KEY_HINTS.NAVIGATE} ${KEY_HINTS.SELECT} ${KEY_HINTS.BACK}`}\n items={events}\n onSelect={onEventSelect}\n onBack={onBack}\n emptyMessage=\"No events found\"\n renderItem={(ev, isSelected) => (\n <Text key={ev.id} color={isSelected ? \"cyan\" : \"gray\"}>\n {isSelected ? \">\" : \" \"} [{ev.type}] Step {ev.stepNumber} ({formatTimestamp(ev.timestamp)})\n </Text>\n )}\n />\n)\n","import { useCallback, useState } from \"react\"\nimport { STOP_EVENT_TYPES } from \"../../constants.js\"\nimport type { InitialRuntimeConfig, PerstackEvent, RuntimeInfo } from \"../../types/index.js\"\n\ntype UseRuntimeInfoOptions = {\n initialExpertName?: string\n initialConfig: InitialRuntimeConfig\n}\nexport const useRuntimeInfo = (options: UseRuntimeInfoOptions) => {\n const [runtimeInfo, setRuntimeInfo] = useState<RuntimeInfo>({\n status: \"initializing\",\n runtimeVersion: options.initialConfig.runtimeVersion,\n expertName: options.initialExpertName,\n model: options.initialConfig.model,\n maxSteps: options.initialConfig.maxSteps,\n maxRetries: options.initialConfig.maxRetries,\n timeout: options.initialConfig.timeout,\n activeSkills: [],\n contextWindowUsage: options.initialConfig.contextWindowUsage,\n })\n const handleEvent = useCallback((event: PerstackEvent) => {\n if (event.type === \"initializeRuntime\") {\n setRuntimeInfo((prev) => ({\n runtimeVersion: event.runtimeVersion,\n expertName: event.expertName,\n model: event.model,\n maxSteps: event.maxSteps,\n maxRetries: event.maxRetries,\n timeout: event.timeout,\n currentStep: 1,\n status: \"running\",\n query: event.query,\n statusChangedAt: Date.now(),\n activeSkills: [],\n contextWindowUsage: prev.contextWindowUsage,\n }))\n return { initialized: true }\n }\n if (event.type === \"skillConnected\") {\n setRuntimeInfo((prev) => ({\n ...prev,\n activeSkills: [...prev.activeSkills, event.skillName],\n }))\n return null\n }\n if (event.type === \"skillDisconnected\") {\n setRuntimeInfo((prev) => ({\n ...prev,\n activeSkills: prev.activeSkills.filter((s) => s !== event.skillName),\n }))\n return null\n }\n if (\"stepNumber\" in event) {\n const isComplete = event.type === \"completeRun\"\n const isStopped = STOP_EVENT_TYPES.includes(event.type as (typeof STOP_EVENT_TYPES)[number])\n const checkpoint =\n \"nextCheckpoint\" in event\n ? event.nextCheckpoint\n : \"checkpoint\" in event\n ? event.checkpoint\n : undefined\n setRuntimeInfo((prev) => ({\n ...prev,\n currentStep: event.stepNumber,\n status: isComplete ? \"completed\" : isStopped ? \"stopped\" : \"running\",\n ...(isComplete || isStopped ? { statusChangedAt: Date.now() } : {}),\n ...(checkpoint?.contextWindowUsage !== undefined\n ? { contextWindowUsage: checkpoint.contextWindowUsage }\n : {}),\n }))\n if (isComplete) return { completed: true }\n if (isStopped) return { stopped: true }\n }\n return null\n }, [])\n const setExpertName = useCallback((expertName: string) => {\n setRuntimeInfo((prev) => ({ ...prev, expertName }))\n }, [])\n const setQuery = useCallback((query: string) => {\n setRuntimeInfo((prev) => ({ ...prev, query }))\n }, [])\n const setCurrentStep = useCallback((step: number) => {\n setRuntimeInfo((prev) => ({ ...prev, currentStep: step }))\n }, [])\n const setContextWindowUsage = useCallback((contextWindowUsage: number) => {\n setRuntimeInfo((prev) => ({ ...prev, contextWindowUsage }))\n }, [])\n return {\n runtimeInfo,\n handleEvent,\n setExpertName,\n setQuery,\n setCurrentStep,\n setContextWindowUsage,\n }\n}\n","import { useListNavigation, useTextInput } from \"@perstack/tui-components\"\nimport type { Key } from \"ink\"\nimport { useCallback, useState } from \"react\"\nimport type { ExpertOption } from \"../../types/index.js\"\n\ntype UseExpertSelectorOptions = {\n experts: ExpertOption[]\n onExpertSelect: (expertKey: string) => void\n extraKeyHandler?: (inputChar: string, key: Key) => boolean\n}\nexport const useExpertSelector = (options: UseExpertSelectorOptions) => {\n const { experts, onExpertSelect, extraKeyHandler } = options\n const [inputMode, setInputMode] = useState(false)\n const { selectedIndex, handleNavigation } = useListNavigation({\n items: experts,\n onSelect: (expert) => onExpertSelect(expert.key),\n })\n const { input, handleInput, reset } = useTextInput({\n onSubmit: (value) => {\n onExpertSelect(value)\n setInputMode(false)\n },\n onCancel: () => setInputMode(false),\n })\n const handleKeyInput = useCallback(\n (inputChar: string, key: Key) => {\n if (inputMode) {\n handleInput(inputChar, key)\n return\n }\n if (handleNavigation(inputChar, key)) return\n if (extraKeyHandler?.(inputChar, key)) return\n if (inputChar === \"i\") {\n reset()\n setInputMode(true)\n }\n },\n [inputMode, handleInput, handleNavigation, extraKeyHandler, reset],\n )\n return {\n inputMode,\n input,\n selectedIndex,\n handleKeyInput,\n }\n}\n","import { Box, Text } from \"ink\"\nimport type { ExpertOption } from \"../types/index.js\"\n\nexport type ExpertListProps = {\n experts: ExpertOption[]\n selectedIndex: number\n showSource?: boolean\n inline?: boolean\n maxItems?: number\n}\nexport const ExpertList = ({\n experts,\n selectedIndex,\n showSource = false,\n inline = false,\n maxItems,\n}: ExpertListProps) => {\n const displayExperts = maxItems ? experts.slice(0, maxItems) : experts\n if (displayExperts.length === 0) {\n return <Text color=\"gray\">No experts found.</Text>\n }\n const items = displayExperts.map((expert, index) => (\n <Text key={expert.key} color={index === selectedIndex ? \"cyan\" : \"gray\"}>\n {index === selectedIndex ? \">\" : \" \"} {showSource ? expert.key : expert.name}\n {showSource && expert.source && (\n <>\n {\" \"}\n <Text color={expert.source === \"configured\" ? \"green\" : \"yellow\"}>\n [{expert.source === \"configured\" ? \"config\" : \"recent\"}]\n </Text>\n </>\n )}\n {inline ? \" \" : \"\"}\n </Text>\n ))\n return inline ? <Box>{items}</Box> : <Box flexDirection=\"column\">{items}</Box>\n}\n","import type { Key } from \"ink\"\nimport { Box, Text, useInput } from \"ink\"\nimport { UI_CONSTANTS } from \"../constants.js\"\nimport { useExpertSelector } from \"../hooks/index.js\"\nimport type { ExpertOption } from \"../types/index.js\"\nimport { ExpertList } from \"./expert-list.js\"\n\nexport type ExpertSelectorBaseProps = {\n experts: ExpertOption[]\n hint: string\n onExpertSelect: (expertKey: string) => void\n showSource?: boolean\n inline?: boolean\n maxItems?: number\n extraKeyHandler?: (inputChar: string, key: Key) => boolean\n}\nexport const ExpertSelectorBase = ({\n experts,\n hint,\n onExpertSelect,\n showSource = false,\n inline = false,\n maxItems = UI_CONSTANTS.MAX_VISIBLE_LIST_ITEMS,\n extraKeyHandler,\n}: ExpertSelectorBaseProps) => {\n const { inputMode, input, selectedIndex, handleKeyInput } = useExpertSelector({\n experts,\n onExpertSelect,\n extraKeyHandler,\n })\n useInput(handleKeyInput)\n return (\n <Box flexDirection={inline ? \"row\" : \"column\"}>\n {!inputMode && (\n <Box flexDirection=\"column\">\n <Box>\n <Text color=\"cyan\">{hint}</Text>\n </Box>\n <ExpertList\n experts={experts}\n selectedIndex={selectedIndex}\n showSource={showSource}\n inline={inline}\n maxItems={maxItems}\n />\n </Box>\n )}\n {inputMode && (\n <Box>\n <Text color=\"gray\">Expert: </Text>\n <Text color=\"white\">{input}</Text>\n <Text color=\"cyan\">_</Text>\n </Box>\n )}\n </Box>\n )\n}\n","import { useCallback } from \"react\"\nimport { KEY_HINTS, UI_CONSTANTS } from \"../../constants.js\"\nimport type { ExpertOption } from \"../../types/index.js\"\nimport { ExpertSelectorBase } from \"../expert-selector-base.js\"\n\nexport type BrowsingExpertsInputProps = {\n experts: ExpertOption[]\n onExpertSelect: (expertKey: string) => void\n onSwitchToHistory: () => void\n}\nexport const BrowsingExpertsInput = ({\n experts,\n onExpertSelect,\n onSwitchToHistory,\n}: BrowsingExpertsInputProps) => {\n const extraKeyHandler = useCallback(\n (inputChar: string) => {\n if (inputChar === \"h\") {\n onSwitchToHistory()\n return true\n }\n return false\n },\n [onSwitchToHistory],\n )\n const hint = `Experts ${KEY_HINTS.NAVIGATE} ${KEY_HINTS.SELECT} ${KEY_HINTS.INPUT} ${KEY_HINTS.HISTORY} ${KEY_HINTS.CANCEL}`\n return (\n <ExpertSelectorBase\n experts={experts}\n hint={hint}\n onExpertSelect={onExpertSelect}\n showSource\n maxItems={UI_CONSTANTS.MAX_VISIBLE_LIST_ITEMS}\n extraKeyHandler={extraKeyHandler}\n />\n )\n}\n","import { Text } from \"ink\"\nimport { KEY_HINTS } from \"../../constants.js\"\nimport { formatTimestamp } from \"../../helpers.js\"\nimport type { JobHistoryItem } from \"../../types/index.js\"\nimport { ListBrowser } from \"../list-browser.js\"\n\nexport type BrowsingHistoryInputProps = {\n jobs: JobHistoryItem[]\n onJobSelect: (job: JobHistoryItem) => void\n onJobResume: (job: JobHistoryItem) => void\n onSwitchToExperts: () => void\n}\nexport const BrowsingHistoryInput = ({\n jobs,\n onJobSelect,\n onJobResume,\n onSwitchToExperts,\n}: BrowsingHistoryInputProps) => (\n <ListBrowser\n title={`Job History ${KEY_HINTS.NAVIGATE} ${KEY_HINTS.RESUME} ${KEY_HINTS.CHECKPOINTS} ${KEY_HINTS.NEW}`}\n items={jobs}\n onSelect={onJobResume}\n emptyMessage=\"No jobs found. Press n to start a new job.\"\n extraKeyHandler={(char, _key, selected) => {\n if (char === \"c\" && selected) {\n onJobSelect(selected)\n return true\n }\n if (char === \"n\") {\n onSwitchToExperts()\n return true\n }\n return false\n }}\n renderItem={(job, isSelected) => (\n <Text key={job.jobId} color={isSelected ? \"cyan\" : \"gray\"}>\n {isSelected ? \">\" : \" \"} {job.expertKey} - {job.totalSteps} steps ({job.jobId}) (\n {formatTimestamp(job.startedAt)})\n </Text>\n )}\n />\n)\n","import { useCallback } from \"react\"\nimport { useInputAreaContext } from \"../context/index.js\"\nimport { assertNever } from \"../helpers.js\"\nimport type { EventHistoryItem, InputState } from \"../types/index.js\"\nimport {\n BrowsingCheckpointsInput,\n BrowsingEventDetailInput,\n BrowsingEventsInput,\n BrowsingExpertsInput,\n BrowsingHistoryInput,\n} from \"./input-areas/index.js\"\n\ntype BrowsingState = Exclude<InputState, { type: \"enteringQuery\" } | { type: \"running\" }>\ntype BrowserRouterProps = {\n inputState: BrowsingState\n showEventsHint?: boolean\n}\nexport const BrowserRouter = ({ inputState, showEventsHint = true }: BrowserRouterProps) => {\n const ctx = useInputAreaContext()\n const handleEventSelect = useCallback(\n (event: EventHistoryItem) => {\n if (inputState.type === \"browsingEvents\") {\n ctx.onEventSelect(inputState, event)\n }\n },\n [ctx.onEventSelect, inputState],\n )\n switch (inputState.type) {\n case \"browsingHistory\":\n return (\n <BrowsingHistoryInput\n jobs={inputState.jobs}\n onJobSelect={ctx.onJobSelect}\n onJobResume={ctx.onJobResume}\n onSwitchToExperts={ctx.onSwitchToExperts}\n />\n )\n case \"browsingExperts\":\n return (\n <BrowsingExpertsInput\n experts={inputState.experts}\n onExpertSelect={ctx.onExpertSelect}\n onSwitchToHistory={ctx.onSwitchToHistory}\n />\n )\n case \"browsingCheckpoints\":\n return (\n <BrowsingCheckpointsInput\n job={inputState.job}\n checkpoints={inputState.checkpoints}\n onCheckpointSelect={ctx.onCheckpointSelect}\n onCheckpointResume={ctx.onCheckpointResume}\n onBack={ctx.onBack}\n showEventsHint={showEventsHint}\n />\n )\n case \"browsingEvents\":\n return (\n <BrowsingEventsInput\n checkpoint={inputState.checkpoint}\n events={inputState.events}\n onEventSelect={handleEventSelect}\n onBack={ctx.onBack}\n />\n )\n case \"browsingEventDetail\":\n return <BrowsingEventDetailInput event={inputState.selectedEvent} onBack={ctx.onBack} />\n default:\n return assertNever(inputState)\n }\n}\n","import { Box, Text } from \"ink\"\nimport type React from \"react\"\nimport { INDICATOR } from \"../constants.js\"\nexport type StatusColor = \"green\" | \"red\" | \"yellow\" | \"white\" | \"gray\" | \"cyan\" | \"blue\"\n\ntype ActionRowSimpleProps = {\n indicatorColor: StatusColor\n text: string\n textDimColor?: boolean\n}\nexport const ActionRowSimple = ({\n indicatorColor,\n text,\n textDimColor = false,\n}: ActionRowSimpleProps) => (\n <Box flexDirection=\"column\">\n <Box flexDirection=\"row\">\n <Box paddingRight={1}>\n <Text color={indicatorColor}>{INDICATOR.BULLET}</Text>\n </Box>\n <Text color=\"white\" dimColor={textDimColor}>\n {text}\n </Text>\n </Box>\n </Box>\n)\n\ntype ActionRowProps = {\n indicatorColor: StatusColor\n label: string\n summary?: string\n children: React.ReactNode\n}\nexport const ActionRow = ({ indicatorColor, label, summary, children }: ActionRowProps) => (\n <Box flexDirection=\"column\">\n <Box flexDirection=\"row\" gap={1}>\n <Text color={indicatorColor}>{INDICATOR.BULLET}</Text>\n <Text color=\"white\">{label}</Text>\n {summary && (\n <Text color=\"white\" dimColor>\n {summary}\n </Text>\n )}\n </Box>\n <Box flexDirection=\"row\">\n <Box paddingRight={1}>\n <Text dimColor>{INDICATOR.TREE}</Text>\n </Box>\n {children}\n </Box>\n </Box>\n)\n","import type { Activity, ActivityOrGroup, ParallelActivitiesGroup } from \"@perstack/core\"\nimport { Box, Text } from \"ink\"\nimport type React from \"react\"\nimport { RENDER_CONSTANTS, UI_CONSTANTS } from \"../constants.js\"\nimport { shortenPath, summarizeOutput, truncateText } from \"../helpers.js\"\nimport { ActionRow, ActionRowSimple, type StatusColor } from \"./action-row.js\"\n\ntype CheckpointActionRowProps = {\n action: ActivityOrGroup\n}\n\nexport const CheckpointActionRow = ({ action }: CheckpointActionRowProps): React.ReactNode => {\n // Handle ParallelActivitiesGroup\n if (action.type === \"parallelGroup\") {\n return renderParallelGroup(action)\n }\n\n const actionElement = renderAction(action)\n if (!actionElement) return null\n\n return (\n <Box flexDirection=\"column\">\n {action.reasoning && renderReasoning(action.reasoning)}\n {actionElement}\n </Box>\n )\n}\n\nfunction renderParallelGroup(group: ParallelActivitiesGroup): React.ReactNode {\n return (\n <Box flexDirection=\"column\">\n {group.reasoning && renderReasoning(group.reasoning)}\n {group.activities.map((activity, index) => {\n const actionElement = renderAction(activity)\n if (!actionElement) return null\n return (\n <Box key={activity.id || `${activity.type}-${index}`} flexDirection=\"column\">\n {actionElement}\n </Box>\n )\n })}\n </Box>\n )\n}\n\nfunction renderReasoning(text: string): React.ReactNode {\n const lines = text.split(\"\\n\")\n return (\n <ActionRow indicatorColor=\"white\" label=\"Reasoning\">\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Text key={`reasoning-${idx}`} dimColor wrap=\"wrap\">\n {line}\n </Text>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderAction(action: Activity): React.ReactNode {\n const color: StatusColor =\n action.type === \"error\" || (\"error\" in action && action.error) ? \"red\" : \"green\"\n\n switch (action.type) {\n case \"query\":\n return renderQuery(action.text, action.runId)\n\n case \"retry\":\n return (\n <ActionRow indicatorColor=\"yellow\" label=\"Retry\">\n <Text dimColor>{action.message || action.error}</Text>\n </ActionRow>\n )\n\n case \"complete\":\n return (\n <ActionRow indicatorColor=\"green\" label=\"Run Results\">\n <Text>{action.text}</Text>\n </ActionRow>\n )\n\n case \"attemptCompletion\": {\n // Show status of completion attempt\n if (action.error) {\n return (\n <ActionRow indicatorColor=\"red\" label=\"Completion Failed\">\n <Text color=\"red\">{action.error}</Text>\n </ActionRow>\n )\n }\n const remaining = action.remainingTodos?.filter((t) => !t.completed) ?? []\n if (remaining.length > 0) {\n return (\n <ActionRow indicatorColor=\"yellow\" label=\"Completion Blocked\">\n <Text dimColor>\n {remaining.length} remaining task{remaining.length > 1 ? \"s\" : \"\"}\n </Text>\n </ActionRow>\n )\n }\n return <ActionRowSimple indicatorColor=\"green\" text=\"Completion Accepted\" />\n }\n\n case \"todo\":\n return renderTodo(action, color)\n\n case \"clearTodo\":\n return <ActionRowSimple indicatorColor={color} text=\"Todo Cleared\" />\n\n case \"readTextFile\":\n return renderReadTextFile(action, color)\n\n case \"writeTextFile\":\n return renderWriteTextFile(action, color)\n\n case \"editTextFile\":\n return renderEditTextFile(action, color)\n\n case \"appendTextFile\":\n return renderAppendTextFile(action, color)\n\n case \"deleteFile\":\n return (\n <ActionRow indicatorColor={color} label=\"Delete\" summary={shortenPath(action.path)}>\n <Text dimColor>Removed</Text>\n </ActionRow>\n )\n\n case \"deleteDirectory\":\n return (\n <ActionRow indicatorColor={color} label=\"Delete Dir\" summary={shortenPath(action.path)}>\n <Text dimColor>Removed{action.recursive ? \" (recursive)\" : \"\"}</Text>\n </ActionRow>\n )\n\n case \"moveFile\":\n return (\n <ActionRow indicatorColor={color} label=\"Move\" summary={shortenPath(action.source)}>\n <Text dimColor>→ {shortenPath(action.destination, 30)}</Text>\n </ActionRow>\n )\n\n case \"createDirectory\":\n return (\n <ActionRow indicatorColor={color} label=\"Mkdir\" summary={shortenPath(action.path)}>\n <Text dimColor>Created</Text>\n </ActionRow>\n )\n\n case \"listDirectory\":\n return renderListDirectory(action, color)\n\n case \"getFileInfo\":\n return (\n <ActionRow indicatorColor={color} label=\"Info\" summary={shortenPath(action.path)}>\n <Text dimColor>Fetched</Text>\n </ActionRow>\n )\n\n case \"readPdfFile\":\n return (\n <ActionRow indicatorColor={color} label=\"PDF\" summary={shortenPath(action.path)}>\n <Text dimColor>Read</Text>\n </ActionRow>\n )\n\n case \"readImageFile\":\n return (\n <ActionRow indicatorColor={color} label=\"Image\" summary={shortenPath(action.path)}>\n <Text dimColor>Read</Text>\n </ActionRow>\n )\n\n case \"exec\":\n return renderExec(action, color)\n\n case \"delegate\":\n return (\n <ActionRow indicatorColor=\"yellow\" label={action.delegateExpertKey}>\n <Text\n dimColor\n >{`{\"query\":\"${truncateText(action.query, UI_CONSTANTS.TRUNCATE_TEXT_MEDIUM)}\"}`}</Text>\n </ActionRow>\n )\n\n case \"delegationComplete\":\n return (\n <ActionRowSimple\n indicatorColor=\"green\"\n text={`Delegation Complete (${action.count} delegate${action.count > 1 ? \"s\" : \"\"} returned)`}\n />\n )\n\n case \"interactiveTool\":\n return (\n <ActionRow indicatorColor=\"yellow\" label={`Interactive: ${action.toolName}`}>\n <Text dimColor>\n {truncateText(JSON.stringify(action.args), UI_CONSTANTS.TRUNCATE_TEXT_MEDIUM)}\n </Text>\n </ActionRow>\n )\n\n case \"generalTool\":\n return (\n <ActionRow indicatorColor={color} label={action.toolName}>\n <Text dimColor>\n {truncateText(JSON.stringify(action.args), UI_CONSTANTS.TRUNCATE_TEXT_MEDIUM)}\n </Text>\n </ActionRow>\n )\n\n case \"error\":\n return (\n <ActionRow indicatorColor=\"red\" label={action.errorName ?? \"Error\"}>\n <Text color=\"red\">{action.error ?? \"Unknown error\"}</Text>\n </ActionRow>\n )\n\n default: {\n // Exhaustive check - if we get here, we missed a case\n const _exhaustive: never = action\n return null\n }\n }\n}\n\nfunction renderTodo(\n action: Extract<Activity, { type: \"todo\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { newTodos, completedTodos, todos } = action\n\n const hasNewTodos = newTodos && newTodos.length > 0\n const hasCompletedTodos = completedTodos && completedTodos.length > 0\n\n if (!hasNewTodos && !hasCompletedTodos) {\n return <ActionRowSimple indicatorColor={color} text=\"Todo No changes\" />\n }\n\n // Build label parts\n const labelParts: string[] = []\n if (hasNewTodos) {\n labelParts.push(`Added ${newTodos.length} task${newTodos.length > 1 ? \"s\" : \"\"}`)\n }\n if (hasCompletedTodos) {\n labelParts.push(\n `Completed ${completedTodos.length} task${completedTodos.length > 1 ? \"s\" : \"\"}`,\n )\n }\n const label = `Todo ${labelParts.join(\", \")}`\n\n // Get completed titles for display\n const completedTitles = hasCompletedTodos\n ? completedTodos\n .map((id) => todos.find((t) => t.id === id)?.title)\n .filter((t): t is string => t !== undefined)\n : []\n\n // If no content to show in body, use simple row\n if (!hasNewTodos && completedTitles.length === 0) {\n return <ActionRowSimple indicatorColor={color} text={label} />\n }\n\n return (\n <ActionRow indicatorColor={color} label={label}>\n <Box flexDirection=\"column\">\n {hasNewTodos &&\n newTodos.slice(0, RENDER_CONSTANTS.NEW_TODO_MAX_PREVIEW).map((todo, idx) => (\n <Text key={`todo-${idx}`} dimColor>\n ○ {todo}\n </Text>\n ))}\n {hasNewTodos && newTodos.length > RENDER_CONSTANTS.NEW_TODO_MAX_PREVIEW && (\n <Text dimColor>... +{newTodos.length - RENDER_CONSTANTS.NEW_TODO_MAX_PREVIEW} more</Text>\n )}\n {completedTitles.slice(0, RENDER_CONSTANTS.NEW_TODO_MAX_PREVIEW).map((title, idx) => (\n <Text key={`completed-${idx}`} dimColor>\n ✓ {title}\n </Text>\n ))}\n {completedTitles.length > RENDER_CONSTANTS.NEW_TODO_MAX_PREVIEW && (\n <Text dimColor>\n ... +{completedTitles.length - RENDER_CONSTANTS.NEW_TODO_MAX_PREVIEW} more\n </Text>\n )}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderReadTextFile(\n action: Extract<Activity, { type: \"readTextFile\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { path, content, from, to } = action\n const lineRange = from !== undefined && to !== undefined ? `#${from}-${to}` : \"\"\n const lines = content?.split(\"\\n\") ?? []\n return (\n <ActionRow\n indicatorColor={color}\n label=\"Read Text File\"\n summary={`${shortenPath(path)}${lineRange}`}\n >\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Box flexDirection=\"row\" key={`read-${idx}`} gap={1}>\n <Text color=\"white\" dimColor>\n {line}\n </Text>\n </Box>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderWriteTextFile(\n action: Extract<Activity, { type: \"writeTextFile\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { path, text } = action\n const lines = text.split(\"\\n\")\n return (\n <ActionRow indicatorColor={color} label=\"Write Text File\" summary={shortenPath(path)}>\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Box flexDirection=\"row\" key={`write-${idx}`} gap={1}>\n <Text color=\"green\" dimColor>\n +\n </Text>\n <Text color=\"white\" dimColor>\n {line}\n </Text>\n </Box>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderEditTextFile(\n action: Extract<Activity, { type: \"editTextFile\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { path, oldText, newText } = action\n const oldLines = oldText.split(\"\\n\")\n const newLines = newText.split(\"\\n\")\n return (\n <ActionRow indicatorColor={color} label=\"Edit Text File\" summary={shortenPath(path)}>\n <Box flexDirection=\"column\">\n {oldLines.map((line, idx) => (\n <Box flexDirection=\"row\" key={`old-${idx}`} gap={1}>\n <Text color=\"red\" dimColor>\n -\n </Text>\n <Text color=\"white\" dimColor>\n {line}\n </Text>\n </Box>\n ))}\n {newLines.map((line, idx) => (\n <Box flexDirection=\"row\" key={`new-${idx}`} gap={1}>\n <Text color=\"green\" dimColor>\n +\n </Text>\n <Text dimColor>{line}</Text>\n </Box>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderAppendTextFile(\n action: Extract<Activity, { type: \"appendTextFile\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { path, text } = action\n const lines = text.split(\"\\n\")\n return (\n <ActionRow indicatorColor={color} label=\"Append Text File\" summary={shortenPath(path)}>\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Box flexDirection=\"row\" key={`append-${idx}`} gap={1}>\n <Text color=\"green\" dimColor>\n +\n </Text>\n <Text color=\"white\" dimColor>\n {line}\n </Text>\n </Box>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderListDirectory(\n action: Extract<Activity, { type: \"listDirectory\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { path, items } = action\n const itemLines =\n items?.map((item) => `${item.type === \"directory\" ? \"📁\" : \"📄\"} ${item.name}`) ?? []\n const { visible, remaining } = summarizeOutput(itemLines, RENDER_CONSTANTS.LIST_DIR_MAX_ITEMS)\n return (\n <ActionRow indicatorColor={color} label=\"List\" summary={shortenPath(path)}>\n <Box flexDirection=\"column\">\n {visible.map((line, idx) => (\n <Text key={`dir-${idx}`} dimColor>\n {truncateText(line, UI_CONSTANTS.TRUNCATE_TEXT_DEFAULT)}\n </Text>\n ))}\n {remaining > 0 && <Text dimColor>... +{remaining} more</Text>}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderExec(\n action: Extract<Activity, { type: \"exec\" }>,\n color: StatusColor,\n): React.ReactNode {\n const { command, args, cwd, output } = action\n const cwdPart = cwd ? ` ${shortenPath(cwd, 40)}` : \"\"\n const cmdLine = truncateText(\n `${command} ${args.join(\" \")}${cwdPart}`,\n UI_CONSTANTS.TRUNCATE_TEXT_DEFAULT,\n )\n const outputLines = output?.split(\"\\n\") ?? []\n const { visible, remaining } = summarizeOutput(\n outputLines,\n RENDER_CONSTANTS.EXEC_OUTPUT_MAX_LINES,\n )\n return (\n <ActionRow indicatorColor={color} label={`Bash ${cmdLine}`}>\n <Box flexDirection=\"column\">\n {visible.map((line, idx) => (\n <Text key={`out-${idx}`} dimColor>\n {truncateText(line, UI_CONSTANTS.TRUNCATE_TEXT_DEFAULT)}\n </Text>\n ))}\n {remaining > 0 && <Text dimColor>... +{remaining} more</Text>}\n </Box>\n </ActionRow>\n )\n}\n\nfunction renderQuery(text: string, runId: string): React.ReactNode {\n const lines = text.split(\"\\n\")\n // Show abbreviated runId (first 8 chars) to help identify different runs\n const shortRunId = runId.slice(0, 8)\n return (\n <ActionRow indicatorColor=\"cyan\" label=\"Query\" summary={`(${shortRunId})`}>\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Text key={`query-${idx}`} dimColor wrap=\"wrap\">\n {line}\n </Text>\n ))}\n </Box>\n </ActionRow>\n )\n}\n","import { useTextInput } from \"@perstack/tui-components\"\nimport { Box, Text, useInput } from \"ink\"\nimport type { RuntimeInfo } from \"../types/index.js\"\nexport type RunSettingProps = {\n info: RuntimeInfo\n eventCount: number\n isEditing: boolean\n expertName?: string\n onQuerySubmit?: (query: string) => void\n}\nexport const RunSetting = ({\n info,\n eventCount,\n isEditing,\n expertName,\n onQuerySubmit,\n}: RunSettingProps) => {\n const { input, handleInput } = useTextInput({\n onSubmit: onQuerySubmit ?? (() => {}),\n })\n useInput(handleInput, { isActive: isEditing })\n const displayExpertName = expertName ?? info.expertName\n const skills = info.activeSkills.length > 0 ? info.activeSkills.join(\", \") : \"\"\n const step = info.currentStep !== undefined ? String(info.currentStep) : \"\"\n const usagePercent = (info.contextWindowUsage * 100).toFixed(1)\n return (\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor=\"gray\"\n borderTop={true}\n borderBottom={false}\n borderLeft={false}\n borderRight={false}\n >\n <Text>\n <Text bold color=\"cyan\">\n Perstack\n </Text>\n {info.runtimeVersion && <Text color=\"gray\"> (v{info.runtimeVersion})</Text>}\n </Text>\n <Text>\n <Text color=\"gray\">Expert: </Text>\n <Text color=\"white\">{displayExpertName}</Text>\n <Text color=\"gray\"> / Skills: </Text>\n <Text color=\"green\">{skills}</Text>\n </Text>\n <Text>\n <Text color=\"gray\">Status: </Text>\n <Text\n color={\n info.status === \"running\" ? \"green\" : info.status === \"completed\" ? \"cyan\" : \"yellow\"\n }\n >\n {info.status}\n </Text>\n <Text color=\"gray\"> / Step: </Text>\n <Text color=\"white\">{step}</Text>\n <Text color=\"gray\"> / Events: </Text>\n <Text color=\"white\">{eventCount}</Text>\n <Text color=\"gray\"> / Usage: </Text>\n <Text color=\"white\">{usagePercent}%</Text>\n </Text>\n <Text>\n <Text color=\"gray\">Model: </Text>\n <Text color=\"white\">{info.model}</Text>\n </Text>\n <Box>\n <Text color=\"gray\">Query: </Text>\n {isEditing ? (\n <>\n <Text color=\"white\">{input}</Text>\n <Text color=\"cyan\">_</Text>\n </>\n ) : (\n <Text color=\"white\">{info.query}</Text>\n )}\n </Box>\n </Box>\n )\n}\n","import { Box, Text } from \"ink\"\nimport type React from \"react\"\nimport type { PerRunStreamingState, StreamingState } from \"../types/index.js\"\nimport { ActionRow } from \"./action-row.js\"\n\ntype StreamingDisplayProps = {\n streaming: StreamingState\n}\n\n/**\n * Renders currently active streaming content.\n * This component is sandwiched between <Static> logs and input fields.\n * Content is only shown while actively streaming, and moves to <Static>\n * logs once complete.\n *\n * Streaming content is organized by run ID to support parallel execution.\n * Each run's streaming content is displayed in a separate section with\n * the expert key as a label.\n */\nexport const StreamingDisplay = ({ streaming }: StreamingDisplayProps): React.ReactNode => {\n const activeRuns = Object.entries(streaming.runs).filter(\n ([, run]) => run.isReasoningActive || run.isRunResultActive,\n )\n\n if (activeRuns.length === 0) return null\n\n return (\n <Box flexDirection=\"column\" marginY={1}>\n {activeRuns.map(([runId, run]) => (\n <StreamingRunSection key={runId} run={run} />\n ))}\n </Box>\n )\n}\n\nfunction StreamingRunSection({ run }: { run: PerRunStreamingState }): React.ReactNode {\n return (\n <Box flexDirection=\"column\">\n {run.isReasoningActive && run.reasoning !== undefined && (\n <StreamingReasoning expertKey={run.expertKey} text={run.reasoning} />\n )}\n {run.isRunResultActive && run.runResult !== undefined && (\n <StreamingRunResult expertKey={run.expertKey} text={run.runResult} />\n )}\n </Box>\n )\n}\n\nfunction StreamingReasoning({\n expertKey,\n text,\n}: {\n expertKey: string\n text: string\n}): React.ReactNode {\n const lines = text.split(\"\\n\")\n const label = `[${formatExpertKey(expertKey)}] Reasoning...`\n return (\n <ActionRow indicatorColor=\"cyan\" label={label}>\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Text key={`streaming-reasoning-${idx}`} dimColor wrap=\"wrap\">\n {line}\n </Text>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction StreamingRunResult({\n expertKey,\n text,\n}: {\n expertKey: string\n text: string\n}): React.ReactNode {\n const lines = text.split(\"\\n\")\n const label = `[${formatExpertKey(expertKey)}] Generating...`\n return (\n <ActionRow indicatorColor=\"green\" label={label}>\n <Box flexDirection=\"column\">\n {lines.map((line, idx) => (\n <Text key={`streaming-run-result-${idx}`} wrap=\"wrap\">\n {line}\n </Text>\n ))}\n </Box>\n </ActionRow>\n )\n}\n\nfunction formatExpertKey(expertKey: string): string {\n const atIndex = expertKey.lastIndexOf(\"@\")\n if (atIndex > 0) {\n return expertKey.substring(0, atIndex)\n }\n return expertKey\n}\n","import type { Activity, ActivityOrGroup, ParallelActivitiesGroup } from \"@perstack/core\"\nimport { Box, Text } from \"ink\"\nimport type React from \"react\"\nimport { useMemo } from \"react\"\nimport { CheckpointActionRow } from \"../../components/index.js\"\n\ntype RunNode = {\n runId: string\n expertKey: string\n activities: ActivityOrGroup[]\n children: RunNode[]\n}\n\ntype ActivityLogPanelProps = {\n activities: ActivityOrGroup[]\n}\n\nfunction getActivityKey(activityOrGroup: ActivityOrGroup, index: number): string {\n return activityOrGroup.id || `activity-${index}`\n}\n\nconst RunBox = ({ node, isRoot }: { node: RunNode; isRoot: boolean }): React.ReactNode => {\n if (isRoot) {\n return (\n <Box flexDirection=\"column\">\n {node.activities.map((activity, index) => (\n <CheckpointActionRow key={getActivityKey(activity, index)} action={activity} />\n ))}\n {node.children.map((child) => (\n <RunBox key={child.runId} node={child} isRoot={false} />\n ))}\n </Box>\n )\n }\n\n // Show abbreviated runId (first 8 chars) to help identify different runs\n const shortRunId = node.runId.slice(0, 8)\n return (\n <Box flexDirection=\"column\" borderStyle=\"round\" borderColor=\"gray\" marginLeft={1}>\n <Text dimColor bold>\n [{node.expertKey}] <Text dimColor>({shortRunId})</Text>\n </Text>\n {node.activities.map((activity, index) => (\n <CheckpointActionRow key={getActivityKey(activity, index)} action={activity} />\n ))}\n {node.children.map((child) => (\n <RunBox key={child.runId} node={child} isRoot={false} />\n ))}\n </Box>\n )\n}\n\n/**\n * Extract base activity properties from ActivityOrGroup.\n * For ParallelActivitiesGroup, uses the group's properties.\n * For Activity, uses the activity's properties directly.\n */\nfunction getActivityProps(\n activityOrGroup: ActivityOrGroup,\n): Pick<Activity, \"runId\" | \"expertKey\" | \"delegatedBy\"> {\n if (activityOrGroup.type === \"parallelGroup\") {\n const group = activityOrGroup as ParallelActivitiesGroup\n // For groups, check the first activity for delegatedBy info\n const firstActivity = group.activities[0]\n return {\n runId: group.runId,\n expertKey: group.expertKey,\n delegatedBy: firstActivity?.delegatedBy,\n }\n }\n return activityOrGroup\n}\n\nexport const ActivityLogPanel = ({ activities }: ActivityLogPanelProps): React.ReactNode => {\n const rootNodes = useMemo(() => {\n const nodeMap = new Map<string, RunNode>()\n const roots: RunNode[] = []\n // Track orphan nodes that need parent lookup (parentRunId -> childNode[])\n const orphanChildren = new Map<string, RunNode[]>()\n\n for (const activityOrGroup of activities) {\n const { runId, expertKey, delegatedBy } = getActivityProps(activityOrGroup)\n\n let node = nodeMap.get(runId)\n if (!node) {\n node = {\n runId,\n expertKey,\n activities: [],\n children: [],\n }\n nodeMap.set(runId, node)\n\n // Check if any orphan children were waiting for this node\n const waitingChildren = orphanChildren.get(runId)\n if (waitingChildren) {\n for (const child of waitingChildren) {\n node.children.push(child)\n // Remove from roots if it was added there\n const rootIndex = roots.indexOf(child)\n if (rootIndex !== -1) {\n roots.splice(rootIndex, 1)\n }\n }\n orphanChildren.delete(runId)\n }\n\n if (delegatedBy) {\n const parentNode = nodeMap.get(delegatedBy.runId)\n if (parentNode) {\n parentNode.children.push(node)\n } else {\n // Parent doesn't exist yet - track as orphan and add to roots temporarily\n const orphans = orphanChildren.get(delegatedBy.runId) ?? []\n orphans.push(node)\n orphanChildren.set(delegatedBy.runId, orphans)\n roots.push(node)\n }\n } else {\n roots.push(node)\n }\n }\n node.activities.push(activityOrGroup)\n }\n\n return roots\n }, [activities])\n\n return (\n <Box flexDirection=\"column\">\n {rootNodes.map((node) => (\n <RunBox key={node.runId} node={node} isRoot={true} />\n ))}\n </Box>\n )\n}\n","import { useTextInput } from \"@perstack/tui-components\"\nimport { Box, Text, useInput } from \"ink\"\nimport type React from \"react\"\nimport type { RunStatus } from \"../hooks/index.js\"\n\ntype ContinueInputPanelProps = {\n isActive: boolean\n runStatus: RunStatus\n onSubmit: (query: string) => void\n}\n\nexport const ContinueInputPanel = ({\n isActive,\n runStatus,\n onSubmit,\n}: ContinueInputPanelProps): React.ReactNode => {\n const { input, handleInput } = useTextInput({\n onSubmit: (newQuery) => {\n if (isActive && newQuery.trim()) {\n onSubmit(newQuery.trim())\n }\n },\n })\n\n useInput(handleInput, { isActive })\n\n if (runStatus === \"running\") {\n return null\n }\n\n return (\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"gray\">\n <Text>\n <Text color={runStatus === \"completed\" ? \"green\" : \"yellow\"} bold>\n {runStatus === \"completed\" ? \"Completed\" : \"Stopped\"}\n </Text>\n <Text color=\"gray\"> - Enter a follow-up query or wait to exit</Text>\n </Text>\n <Box>\n <Text color=\"gray\">Continue: </Text>\n <Text>{input}</Text>\n <Text color=\"cyan\">_</Text>\n </Box>\n </Box>\n )\n}\n","import type React from \"react\"\nimport { RunSetting } from \"../../components/index.js\"\nimport type { RuntimeInfo } from \"../../types/index.js\"\nimport type { RunStatus } from \"../hooks/index.js\"\n\ntype StatusPanelProps = {\n runtimeInfo: RuntimeInfo\n eventCount: number\n runStatus: RunStatus\n}\n\nexport const StatusPanel = ({\n runtimeInfo,\n eventCount,\n runStatus,\n}: StatusPanelProps): React.ReactNode => {\n if (runStatus !== \"running\") {\n return null\n }\n\n return <RunSetting info={runtimeInfo} eventCount={eventCount} isEditing={false} />\n}\n","import type { PerstackEvent } from \"@perstack/core\"\nimport { useRun } from \"@perstack/react\"\nimport { useApp } from \"ink\"\nimport { useCallback, useEffect, useRef, useState } from \"react\"\nimport { useRuntimeInfo } from \"../../hooks/index.js\"\nimport type { InitialRuntimeConfig } from \"../../types/index.js\"\n\nexport type RunStatus = \"running\" | \"completed\" | \"stopped\"\n\ntype UseExecutionStateOptions = {\n expertKey: string\n query: string\n config: InitialRuntimeConfig\n continueTimeoutMs: number\n historicalEvents?: PerstackEvent[]\n onReady: (addEvent: (event: PerstackEvent) => void) => void\n onComplete: (result: { nextQuery: string | null }) => void\n}\n\nexport type ExecutionState = {\n activities: ReturnType<typeof useRun>[\"activities\"]\n streaming: ReturnType<typeof useRun>[\"streaming\"]\n eventCount: number\n runtimeInfo: ReturnType<typeof useRuntimeInfo>[\"runtimeInfo\"]\n runStatus: RunStatus\n isAcceptingContinue: boolean\n handleContinueSubmit: (query: string) => void\n clearTimeout: () => void\n}\n\nexport const useExecutionState = (options: UseExecutionStateOptions): ExecutionState => {\n const { expertKey, query, config, continueTimeoutMs, historicalEvents, onReady, onComplete } =\n options\n\n const { exit } = useApp()\n const runState = useRun()\n\n const { runtimeInfo, handleEvent, setQuery } = useRuntimeInfo({\n initialExpertName: expertKey,\n initialConfig: config,\n })\n\n const [runStatus, setRunStatus] = useState<RunStatus>(\"running\")\n const [isAcceptingContinue, setIsAcceptingContinue] = useState(false)\n const timeoutRef = useRef<NodeJS.Timeout | null>(null)\n\n const clearTimeoutIfExists = useCallback(() => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current)\n timeoutRef.current = null\n }\n }, [])\n\n const startExitTimeout = useCallback(() => {\n clearTimeoutIfExists()\n timeoutRef.current = setTimeout(() => {\n onComplete({ nextQuery: null })\n exit()\n }, continueTimeoutMs)\n }, [clearTimeoutIfExists, continueTimeoutMs, onComplete, exit])\n\n useEffect(() => {\n setQuery(query)\n }, [query, setQuery])\n\n useEffect(() => {\n if (historicalEvents && historicalEvents.length > 0) {\n runState.appendHistoricalEvents(historicalEvents)\n }\n }, [historicalEvents, runState.appendHistoricalEvents])\n\n useEffect(() => {\n onReady((event: PerstackEvent) => {\n runState.addEvent(event)\n const result = handleEvent(event)\n\n if (result?.completed) {\n setRunStatus(\"completed\")\n setIsAcceptingContinue(true)\n startExitTimeout()\n } else if (result?.stopped) {\n setRunStatus(\"stopped\")\n setIsAcceptingContinue(true)\n startExitTimeout()\n }\n })\n }, [onReady, runState.addEvent, handleEvent, startExitTimeout])\n\n useEffect(() => {\n return () => {\n clearTimeoutIfExists()\n }\n }, [clearTimeoutIfExists])\n\n const handleContinueSubmit = useCallback(\n (newQuery: string) => {\n if (isAcceptingContinue && newQuery.trim()) {\n clearTimeoutIfExists()\n onComplete({ nextQuery: newQuery.trim() })\n exit()\n }\n },\n [isAcceptingContinue, clearTimeoutIfExists, onComplete, exit],\n )\n\n return {\n activities: runState.activities,\n streaming: runState.streaming,\n eventCount: runState.eventCount,\n runtimeInfo,\n runStatus,\n isAcceptingContinue,\n handleContinueSubmit,\n clearTimeout: clearTimeoutIfExists,\n }\n}\n","import type { PerstackEvent } from \"@perstack/core\"\nimport { Box, useApp, useInput } from \"ink\"\nimport { StreamingDisplay } from \"../components/index.js\"\nimport { ActivityLogPanel, ContinueInputPanel, StatusPanel } from \"./components/index.js\"\nimport { useExecutionState } from \"./hooks/index.js\"\nimport type { ExecutionParams, ExecutionResult } from \"./types.js\"\n\ntype ExecutionAppProps = ExecutionParams & {\n onReady: (addEvent: (event: PerstackEvent) => void) => void\n onComplete: (result: ExecutionResult) => void\n}\n\nexport const ExecutionApp = (props: ExecutionAppProps) => {\n const { expertKey, query, config, continueTimeoutMs, historicalEvents, onReady, onComplete } =\n props\n\n const { exit } = useApp()\n\n const state = useExecutionState({\n expertKey,\n query,\n config,\n continueTimeoutMs,\n historicalEvents,\n onReady,\n onComplete,\n })\n\n useInput((input, key) => {\n if (key.ctrl && input === \"c\") {\n state.clearTimeout()\n exit()\n }\n })\n\n return (\n <Box flexDirection=\"column\">\n <ActivityLogPanel activities={state.activities} />\n <StreamingDisplay streaming={state.streaming} />\n <StatusPanel\n runtimeInfo={state.runtimeInfo}\n eventCount={state.eventCount}\n runStatus={state.runStatus}\n />\n <ContinueInputPanel\n isActive={state.isAcceptingContinue}\n runStatus={state.runStatus}\n onSubmit={state.handleContinueSubmit}\n />\n </Box>\n )\n}\n","import type { PerstackEvent } from \"@perstack/core\"\nimport { render } from \"ink\"\nimport { EventQueue } from \"../utils/event-queue.js\"\nimport { ExecutionApp } from \"./app.js\"\nimport type { ExecutionParams, ExecutionResult } from \"./types.js\"\n\ntype RenderExecutionResult = {\n result: Promise<ExecutionResult>\n eventListener: (event: PerstackEvent) => void\n}\n\n/**\n * Renders the execution TUI phase.\n * Returns a promise that resolves with the execution result (next query or null).\n * Also returns an event listener to feed events into the TUI.\n */\nexport function renderExecution(params: ExecutionParams): RenderExecutionResult {\n const eventQueue = new EventQueue()\n\n const result = new Promise<ExecutionResult>((resolve, reject) => {\n let resolved = false\n\n const { waitUntilExit } = render(\n <ExecutionApp\n {...params}\n onReady={(handler) => {\n eventQueue.setHandler(handler)\n }}\n onComplete={(result) => {\n resolved = true\n resolve(result)\n }}\n />,\n )\n\n waitUntilExit()\n .then(() => {\n if (!resolved) {\n reject(new Error(\"Execution cancelled\"))\n }\n })\n .catch(reject)\n })\n\n return {\n result,\n eventListener: (event: PerstackEvent) => {\n eventQueue.emit(event)\n },\n }\n}\n","import { useTextInput } from \"@perstack/tui-components\"\nimport { Box, Text, useApp, useInput } from \"ink\"\nimport { useCallback, useEffect, useMemo, useReducer, useState } from \"react\"\nimport { BrowserRouter } from \"../components/index.js\"\nimport { type InputAreaContextValue, InputAreaProvider } from \"../context/index.js\"\nimport { assertNever } from \"../helpers.js\"\nimport type { CheckpointHistoryItem, ExpertOption, JobHistoryItem } from \"../types/index.js\"\nimport type { SelectionParams, SelectionResult } from \"./types.js\"\n\n// Selection-specific input states (excludes running state)\ntype SelectionState =\n | { type: \"browsingHistory\"; jobs: JobHistoryItem[] }\n | { type: \"browsingExperts\"; experts: ExpertOption[] }\n | { type: \"browsingCheckpoints\"; job: JobHistoryItem; checkpoints: CheckpointHistoryItem[] }\n | { type: \"enteringQuery\"; expertKey: string }\n\ntype SelectionAction =\n | { type: \"BROWSE_HISTORY\"; jobs: JobHistoryItem[] }\n | { type: \"BROWSE_EXPERTS\"; experts: ExpertOption[] }\n | { type: \"SELECT_EXPERT\"; expertKey: string }\n | { type: \"SELECT_JOB\"; job: JobHistoryItem; checkpoints: CheckpointHistoryItem[] }\n | { type: \"GO_BACK_FROM_CHECKPOINTS\"; jobs: JobHistoryItem[] }\n\nconst selectionReducer = (_state: SelectionState, action: SelectionAction): SelectionState => {\n switch (action.type) {\n case \"BROWSE_HISTORY\":\n return { type: \"browsingHistory\", jobs: action.jobs }\n case \"BROWSE_EXPERTS\":\n return { type: \"browsingExperts\", experts: action.experts }\n case \"SELECT_EXPERT\":\n return { type: \"enteringQuery\", expertKey: action.expertKey }\n case \"SELECT_JOB\":\n return { type: \"browsingCheckpoints\", job: action.job, checkpoints: action.checkpoints }\n case \"GO_BACK_FROM_CHECKPOINTS\":\n return { type: \"browsingHistory\", jobs: action.jobs }\n default:\n return assertNever(action)\n }\n}\n\ntype SelectionAppProps = SelectionParams & {\n onComplete: (result: SelectionResult) => void\n}\n\nexport const SelectionApp = (props: SelectionAppProps) => {\n const {\n showHistory,\n initialExpertKey,\n initialQuery,\n initialCheckpoint,\n configuredExperts,\n recentExperts,\n historyJobs,\n onLoadCheckpoints,\n onComplete,\n } = props\n\n const { exit } = useApp()\n\n // Combine configured and recent experts\n const allExperts = useMemo(() => {\n const configured = configuredExperts.map((e) => ({ ...e, source: \"configured\" as const }))\n const recent = recentExperts\n .filter((e) => !configured.some((c) => c.key === e.key))\n .map((e) => ({ ...e, source: \"recent\" as const }))\n return [...configured, ...recent]\n }, [configuredExperts, recentExperts])\n\n // Determine initial state\n const getInitialState = (): SelectionState => {\n // If expert and query are both provided, we'll complete immediately (handled in useEffect)\n if (initialExpertKey && !initialQuery) {\n return { type: \"enteringQuery\", expertKey: initialExpertKey }\n }\n if (showHistory && historyJobs.length > 0) {\n return { type: \"browsingHistory\", jobs: historyJobs }\n }\n return { type: \"browsingExperts\", experts: allExperts }\n }\n\n const [state, dispatch] = useReducer(selectionReducer, undefined, getInitialState)\n const [selectedCheckpoint, setSelectedCheckpoint] = useState<CheckpointHistoryItem | undefined>(\n initialCheckpoint,\n )\n\n // If both expert and query are provided, complete immediately\n useEffect(() => {\n if (initialExpertKey && initialQuery) {\n onComplete({\n expertKey: initialExpertKey,\n query: initialQuery,\n checkpoint: initialCheckpoint,\n })\n exit()\n }\n }, [initialExpertKey, initialQuery, initialCheckpoint, onComplete, exit])\n\n // Text input for query\n const { input: queryInput, handleInput: handleQueryInput } = useTextInput({\n onSubmit: (query) => {\n if (state.type === \"enteringQuery\" && query.trim()) {\n onComplete({\n expertKey: state.expertKey,\n query: query.trim(),\n checkpoint: selectedCheckpoint,\n })\n exit()\n }\n },\n })\n\n useInput(handleQueryInput, { isActive: state.type === \"enteringQuery\" })\n\n // Handlers\n const handleExpertSelect = useCallback((expertKey: string) => {\n dispatch({ type: \"SELECT_EXPERT\", expertKey })\n }, [])\n\n const handleJobSelect = useCallback(\n async (job: JobHistoryItem) => {\n try {\n const checkpoints = await onLoadCheckpoints(job)\n dispatch({ type: \"SELECT_JOB\", job, checkpoints })\n } catch {\n // Failed to load checkpoints, fallback to empty list\n dispatch({ type: \"SELECT_JOB\", job, checkpoints: [] })\n }\n },\n [onLoadCheckpoints],\n )\n\n const handleJobResume = useCallback(\n async (job: JobHistoryItem) => {\n try {\n const checkpoints = await onLoadCheckpoints(job)\n const latestCheckpoint = checkpoints[0]\n if (latestCheckpoint) {\n setSelectedCheckpoint(latestCheckpoint)\n }\n // Enter query mode regardless of whether checkpoint exists\n dispatch({ type: \"SELECT_EXPERT\", expertKey: job.expertKey })\n } catch {\n // Failed to load checkpoints, just enter query mode without checkpoint\n dispatch({ type: \"SELECT_EXPERT\", expertKey: job.expertKey })\n }\n },\n [onLoadCheckpoints],\n )\n\n const handleCheckpointResume = useCallback(\n (checkpoint: CheckpointHistoryItem) => {\n setSelectedCheckpoint(checkpoint)\n // Need to get expertKey from the job - for now use empty and let parent handle\n if (state.type === \"browsingCheckpoints\") {\n dispatch({ type: \"SELECT_EXPERT\", expertKey: state.job.expertKey })\n }\n },\n [state],\n )\n\n const handleBack = useCallback(() => {\n if (state.type === \"browsingCheckpoints\") {\n dispatch({ type: \"GO_BACK_FROM_CHECKPOINTS\", jobs: historyJobs })\n }\n }, [state, historyJobs])\n\n const handleSwitchToExperts = useCallback(() => {\n dispatch({ type: \"BROWSE_EXPERTS\", experts: allExperts })\n }, [allExperts])\n\n const handleSwitchToHistory = useCallback(() => {\n dispatch({ type: \"BROWSE_HISTORY\", jobs: historyJobs })\n }, [historyJobs])\n\n // Handle Ctrl+C to exit\n useInput((input, key) => {\n if (key.ctrl && input === \"c\") {\n exit()\n }\n })\n\n // Context for browser components\n const contextValue = useMemo<InputAreaContextValue>(\n () => ({\n onExpertSelect: handleExpertSelect,\n onQuerySubmit: () => {}, // Not used in browser\n onJobSelect: handleJobSelect,\n onJobResume: handleJobResume,\n onCheckpointSelect: () => {}, // Not used in selection (no event browsing)\n onCheckpointResume: handleCheckpointResume,\n onEventSelect: () => {}, // Not used in selection\n onBack: handleBack,\n onSwitchToExperts: handleSwitchToExperts,\n onSwitchToHistory: handleSwitchToHistory,\n }),\n [\n handleExpertSelect,\n handleJobSelect,\n handleJobResume,\n handleCheckpointResume,\n handleBack,\n handleSwitchToExperts,\n handleSwitchToHistory,\n ],\n )\n\n // If already completed via useEffect, don't render\n if (initialExpertKey && initialQuery) {\n return null\n }\n\n return (\n <Box flexDirection=\"column\">\n <InputAreaProvider value={contextValue}>\n {(state.type === \"browsingHistory\" ||\n state.type === \"browsingExperts\" ||\n state.type === \"browsingCheckpoints\") && (\n <BrowserRouter\n inputState={state as Parameters<typeof BrowserRouter>[0][\"inputState\"]}\n showEventsHint={false}\n />\n )}\n </InputAreaProvider>\n\n {state.type === \"enteringQuery\" && (\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"gray\">\n <Text>\n <Text color=\"cyan\" bold>\n Expert:\n </Text>{\" \"}\n <Text>{state.expertKey}</Text>\n {selectedCheckpoint && (\n <Text color=\"gray\"> (resuming from step {selectedCheckpoint.stepNumber})</Text>\n )}\n </Text>\n <Box>\n <Text color=\"gray\">Query: </Text>\n <Text>{queryInput}</Text>\n <Text color=\"cyan\">_</Text>\n </Box>\n <Text dimColor>Press Enter to start</Text>\n </Box>\n )}\n </Box>\n )\n}\n","import { render } from \"ink\"\nimport { SelectionApp } from \"./app.js\"\nimport type { SelectionParams, SelectionResult } from \"./types.js\"\n\n/**\n * Renders the selection TUI phase.\n * Returns a promise that resolves with the selection result (expert, query, checkpoint).\n */\nexport async function renderSelection(params: SelectionParams): Promise<SelectionResult> {\n return new Promise((resolve, reject) => {\n let resolved = false\n\n const { waitUntilExit } = render(\n <SelectionApp\n {...params}\n onComplete={(result) => {\n resolved = true\n resolve(result)\n }}\n />,\n )\n\n waitUntilExit()\n .then(() => {\n if (!resolved) {\n reject(new Error(\"Selection cancelled\"))\n }\n })\n .catch(reject)\n })\n}\n","import { createId } from \"@paralleldrive/cuid2\"\nimport {\n defaultMaxRetries,\n defaultTimeout,\n parseWithFriendlyError,\n startCommandInputSchema,\n} from \"@perstack/core\"\nimport {\n createInitialJob,\n defaultRetrieveCheckpoint,\n defaultStoreCheckpoint,\n defaultStoreEvent,\n retrieveJob,\n storeJob,\n} from \"@perstack/filesystem-storage\"\nimport { findLockfile, loadLockfile, run as perstackRun, runtimeVersion } from \"@perstack/runtime\"\nimport { Command } from \"commander\"\nimport { resolveRunContext } from \"./lib/context.js\"\nimport { parseInteractiveToolCallResult } from \"./lib/interactive.js\"\nimport {\n getAllEventContentsForJob,\n getAllJobs,\n getCheckpointById,\n getCheckpointsWithDetails,\n type getEventContents,\n getRecentExperts,\n} from \"./lib/run-manager.js\"\nimport { renderExecution } from \"./tui/execution/index.js\"\nimport { renderSelection } from \"./tui/selection/index.js\"\nimport type { CheckpointHistoryItem, JobHistoryItem } from \"./tui/types/index.js\"\n\nconst CONTINUE_TIMEOUT_MS = 60_000\n\nexport const startCommand = new Command()\n .command(\"start\")\n .description(\"Start Perstack with interactive TUI\")\n .argument(\"[expertKey]\", \"Expert key to run (optional, will prompt if not provided)\")\n .argument(\"[query]\", \"Query to run (optional, will prompt if not provided)\")\n .option(\"--config <configPath>\", \"Path to perstack.toml config file\")\n .option(\"--provider <provider>\", \"Provider to use\")\n .option(\"--model <model>\", \"Model to use\")\n .option(\n \"--reasoning-budget <budget>\",\n \"Reasoning budget for native LLM reasoning (minimal, low, medium, high, or token count)\",\n )\n .option(\n \"--max-steps <maxSteps>\",\n \"Maximum number of steps to run, default is undefined (no limit)\",\n )\n .option(\"--max-retries <maxRetries>\", \"Maximum number of generation retries, default is 5\")\n .option(\n \"--timeout <timeout>\",\n \"Timeout for each generation in milliseconds, default is 300000 (5 minutes)\",\n )\n .option(\"--job-id <jobId>\", \"Job ID for identifying the job\")\n .option(\n \"--env-path <path>\",\n \"Path to the environment file (can be specified multiple times), default is .env and .env.local\",\n (value: string, previous: string[]) => previous.concat(value),\n [] as string[],\n )\n .option(\"--verbose\", \"Enable verbose logging\")\n .option(\"--continue\", \"Continue the most recent job with new query\")\n .option(\"--continue-job <jobId>\", \"Continue the specified job with new query\")\n .option(\n \"--resume-from <checkpointId>\",\n \"Resume from a specific checkpoint (requires --continue or --continue-job)\",\n )\n .option(\"-i, --interactive-tool-call-result\", \"Query is interactive tool call result\")\n .action(async (expertKey, query, options) => {\n const input = parseWithFriendlyError(startCommandInputSchema, { expertKey, query, options })\n\n try {\n // Phase 1: Initialize context\n const { perstackConfig, checkpoint, env, providerConfig, model, experts } =\n await resolveRunContext({\n configPath: input.options.config,\n provider: input.options.provider,\n model: input.options.model,\n envPath: input.options.envPath,\n continue: input.options.continue,\n continueJob: input.options.continueJob,\n resumeFrom: input.options.resumeFrom,\n expertKey: input.expertKey,\n })\n\n const maxSteps = input.options.maxSteps ?? perstackConfig.maxSteps\n const maxRetries = input.options.maxRetries ?? perstackConfig.maxRetries ?? defaultMaxRetries\n const timeout = input.options.timeout ?? perstackConfig.timeout ?? defaultTimeout\n\n // Prepare expert lists\n const configuredExperts = Object.keys(perstackConfig.experts ?? {}).map((key) => ({\n key,\n name: key,\n }))\n const recentExperts = getRecentExperts(10)\n\n // Prepare history jobs (only if browsing is needed)\n const showHistory = !input.expertKey && !input.query && !checkpoint\n const historyJobs: JobHistoryItem[] = showHistory\n ? getAllJobs().map((j) => ({\n jobId: j.id,\n status: j.status,\n expertKey: j.coordinatorExpertKey,\n totalSteps: j.totalSteps,\n startedAt: j.startedAt,\n finishedAt: j.finishedAt,\n }))\n : []\n\n // Phase 2: Selection - get expert, query, and optional checkpoint\n const selection = await renderSelection({\n showHistory,\n initialExpertKey: input.expertKey,\n initialQuery: input.query,\n initialCheckpoint: checkpoint\n ? {\n id: checkpoint.id,\n jobId: checkpoint.jobId,\n runId: checkpoint.runId,\n stepNumber: checkpoint.stepNumber,\n contextWindowUsage: checkpoint.contextWindowUsage ?? 0,\n }\n : undefined,\n configuredExperts,\n recentExperts,\n historyJobs,\n onLoadCheckpoints: async (j: JobHistoryItem): Promise<CheckpointHistoryItem[]> => {\n const checkpoints = getCheckpointsWithDetails(j.jobId)\n return checkpoints.map((cp) => ({ ...cp, jobId: j.jobId }))\n },\n })\n\n // Validate selection\n if (!selection.expertKey) {\n console.error(\"Expert key is required\")\n return\n }\n if (!selection.query && !selection.checkpoint) {\n console.error(\"Query is required\")\n return\n }\n\n // Resolve checkpoint if selected from TUI\n let currentCheckpoint = selection.checkpoint\n ? getCheckpointById(selection.checkpoint.jobId, selection.checkpoint.id)\n : checkpoint\n\n if (currentCheckpoint && currentCheckpoint.expert.key !== selection.expertKey) {\n console.error(\n `Checkpoint expert key ${currentCheckpoint.expert.key} does not match input expert key ${selection.expertKey}`,\n )\n return\n }\n\n // Load lockfile if present\n const lockfilePath = findLockfile()\n const lockfile = lockfilePath ? (loadLockfile(lockfilePath) ?? undefined) : undefined\n\n // Phase 3: Execution loop\n let currentQuery: string | null = selection.query\n let currentJobId = currentCheckpoint?.jobId ?? input.options.jobId ?? createId()\n // Track if the next query should be treated as an interactive tool result\n let isNextQueryInteractiveToolResult = input.options.interactiveToolCallResult ?? false\n\n // Track whether this is the first iteration (for historical events display)\n // On first iteration, load all events for the job up to the checkpoint\n // On subsequent iterations, skip historical events (previous TUI already displayed them)\n let isFirstIteration = true\n const initialHistoricalEvents: ReturnType<typeof getEventContents> | undefined =\n currentCheckpoint\n ? getAllEventContentsForJob(currentCheckpoint.jobId, currentCheckpoint.stepNumber)\n : undefined\n\n while (currentQuery !== null) {\n // Only pass historical events on first iteration\n // Subsequent iterations: previous TUI output remains on screen\n const historicalEvents = isFirstIteration ? initialHistoricalEvents : undefined\n\n // Generate a new runId for each iteration\n const runId = createId()\n\n // Start execution TUI\n const { result: executionResult, eventListener } = renderExecution({\n expertKey: selection.expertKey,\n query: currentQuery,\n config: {\n runtimeVersion,\n model,\n maxSteps,\n maxRetries,\n timeout,\n contextWindowUsage: currentCheckpoint?.contextWindowUsage ?? 0,\n },\n continueTimeoutMs: CONTINUE_TIMEOUT_MS,\n historicalEvents,\n })\n\n // Run the expert\n const runResult = await perstackRun(\n {\n setting: {\n jobId: currentJobId,\n runId,\n expertKey: selection.expertKey,\n input:\n isNextQueryInteractiveToolResult && currentCheckpoint\n ? parseInteractiveToolCallResult(currentQuery, currentCheckpoint)\n : { text: currentQuery },\n experts,\n model,\n providerConfig,\n reasoningBudget: input.options.reasoningBudget ?? perstackConfig.reasoningBudget,\n maxSteps: input.options.maxSteps ?? perstackConfig.maxSteps,\n maxRetries: input.options.maxRetries ?? perstackConfig.maxRetries,\n timeout: input.options.timeout ?? perstackConfig.timeout,\n perstackApiBaseUrl: perstackConfig.perstackApiBaseUrl,\n perstackApiKey: env.PERSTACK_API_KEY,\n perstackBaseSkillCommand: perstackConfig.perstackBaseSkillCommand,\n env,\n verbose: input.options.verbose,\n },\n checkpoint: currentCheckpoint,\n },\n {\n eventListener,\n storeCheckpoint: defaultStoreCheckpoint,\n storeEvent: defaultStoreEvent,\n retrieveCheckpoint: defaultRetrieveCheckpoint,\n storeJob,\n retrieveJob,\n createJob: createInitialJob,\n lockfile,\n },\n )\n\n // Wait for execution TUI to complete (user input or timeout)\n const result = await executionResult\n\n // Check if user wants to continue\n const canContinue =\n runResult.status === \"completed\" ||\n runResult.status === \"stoppedByExceededMaxSteps\" ||\n runResult.status === \"stoppedByError\" ||\n runResult.status === \"stoppedByInteractiveTool\"\n\n if (result.nextQuery && canContinue) {\n currentQuery = result.nextQuery\n currentCheckpoint = runResult\n currentJobId = runResult.jobId\n\n // If the run stopped for interactive tool, the next query is an interactive tool result\n isNextQueryInteractiveToolResult = runResult.status === \"stoppedByInteractiveTool\"\n\n // Mark first iteration as complete (subsequent TUIs won't show historical events)\n isFirstIteration = false\n } else {\n currentQuery = null\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n console.error(error.message)\n } else {\n console.error(error)\n }\n }\n })\n","#!/usr/bin/env node\n\nimport { Command } from \"commander\"\nimport packageJson from \"../package.json\" with { type: \"json\" }\nimport { installCommand } from \"../src/install.js\"\nimport { logCommand } from \"../src/log.js\"\nimport { runCommand } from \"../src/run.js\"\nimport { startCommand } from \"../src/start.js\"\n\nconst program = new Command()\n .name(packageJson.name)\n .description(packageJson.description)\n .version(packageJson.version)\n .addCommand(startCommand)\n .addCommand(runCommand)\n .addCommand(logCommand)\n .addCommand(installCommand)\nprogram.parse()\n"]}