@kb-labs/agent-cli 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -0
- package/dist/cli/commands/diff.d.ts +17 -0
- package/dist/cli/commands/diff.js +182 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/history.d.ts +16 -0
- package/dist/cli/commands/history.js +216 -0
- package/dist/cli/commands/history.js.map +1 -0
- package/dist/cli/commands/quality-report.d.ts +21 -0
- package/dist/cli/commands/quality-report.js +457 -0
- package/dist/cli/commands/quality-report.js.map +1 -0
- package/dist/cli/commands/rollback.d.ts +27 -0
- package/dist/cli/commands/rollback.js +109 -0
- package/dist/cli/commands/rollback.js.map +1 -0
- package/dist/cli/commands/run.d.ts +42 -0
- package/dist/cli/commands/run.js +923 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/trace-context.d.ts +22 -0
- package/dist/cli/commands/trace-context.js +131 -0
- package/dist/cli/commands/trace-context.js.map +1 -0
- package/dist/cli/commands/trace-diagnose.d.ts +20 -0
- package/dist/cli/commands/trace-diagnose.js +434 -0
- package/dist/cli/commands/trace-diagnose.js.map +1 -0
- package/dist/cli/commands/trace-event-normalizer.d.ts +13 -0
- package/dist/cli/commands/trace-event-normalizer.js +39 -0
- package/dist/cli/commands/trace-event-normalizer.js.map +1 -0
- package/dist/cli/commands/trace-filter.d.ts +19 -0
- package/dist/cli/commands/trace-filter.js +153 -0
- package/dist/cli/commands/trace-filter.js.map +1 -0
- package/dist/cli/commands/trace-iteration.d.ts +18 -0
- package/dist/cli/commands/trace-iteration.js +192 -0
- package/dist/cli/commands/trace-iteration.js.map +1 -0
- package/dist/cli/commands/trace-stats.d.ts +17 -0
- package/dist/cli/commands/trace-stats.js +247 -0
- package/dist/cli/commands/trace-stats.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +473 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +184 -0
- package/dist/manifest.js +473 -0
- package/dist/manifest.js.map +1 -0
- package/dist/rest/handlers/approve-handler.d.ts +15 -0
- package/dist/rest/handlers/approve-handler.js +60 -0
- package/dist/rest/handlers/approve-handler.js.map +1 -0
- package/dist/rest/handlers/approve-session-plan-handler.d.ts +10 -0
- package/dist/rest/handlers/approve-session-plan-handler.js +52 -0
- package/dist/rest/handlers/approve-session-plan-handler.js.map +1 -0
- package/dist/rest/handlers/correct-handler.d.ts +7 -0
- package/dist/rest/handlers/correct-handler.js +326 -0
- package/dist/rest/handlers/correct-handler.js.map +1 -0
- package/dist/rest/handlers/create-session-handler.d.ts +7 -0
- package/dist/rest/handlers/create-session-handler.js +25 -0
- package/dist/rest/handlers/create-session-handler.js.map +1 -0
- package/dist/rest/handlers/execute-session-plan-handler.d.ts +10 -0
- package/dist/rest/handlers/execute-session-plan-handler.js +635 -0
- package/dist/rest/handlers/execute-session-plan-handler.js.map +1 -0
- package/dist/rest/handlers/generate-spec-handler.d.ts +10 -0
- package/dist/rest/handlers/generate-spec-handler.js +389 -0
- package/dist/rest/handlers/generate-spec-handler.js.map +1 -0
- package/dist/rest/handlers/get-file-diff-handler.d.ts +24 -0
- package/dist/rest/handlers/get-file-diff-handler.js +44 -0
- package/dist/rest/handlers/get-file-diff-handler.js.map +1 -0
- package/dist/rest/handlers/get-session-handler.d.ts +10 -0
- package/dist/rest/handlers/get-session-handler.js +23 -0
- package/dist/rest/handlers/get-session-handler.js.map +1 -0
- package/dist/rest/handlers/get-session-plan-handler.d.ts +10 -0
- package/dist/rest/handlers/get-session-plan-handler.js +53 -0
- package/dist/rest/handlers/get-session-plan-handler.js.map +1 -0
- package/dist/rest/handlers/get-session-turns-handler.d.ts +16 -0
- package/dist/rest/handlers/get-session-turns-handler.js +35 -0
- package/dist/rest/handlers/get-session-turns-handler.js.map +1 -0
- package/dist/rest/handlers/get-spec-handler.d.ts +10 -0
- package/dist/rest/handlers/get-spec-handler.js +39 -0
- package/dist/rest/handlers/get-spec-handler.js.map +1 -0
- package/dist/rest/handlers/list-file-changes-handler.d.ts +13 -0
- package/dist/rest/handlers/list-file-changes-handler.js +34 -0
- package/dist/rest/handlers/list-file-changes-handler.js.map +1 -0
- package/dist/rest/handlers/list-sessions-handler.d.ts +7 -0
- package/dist/rest/handlers/list-sessions-handler.js +23 -0
- package/dist/rest/handlers/list-sessions-handler.js.map +1 -0
- package/dist/rest/handlers/rollback-handler.d.ts +22 -0
- package/dist/rest/handlers/rollback-handler.js +91 -0
- package/dist/rest/handlers/rollback-handler.js.map +1 -0
- package/dist/rest/handlers/run-handler.d.ts +7 -0
- package/dist/rest/handlers/run-handler.js +516 -0
- package/dist/rest/handlers/run-handler.js.map +1 -0
- package/dist/rest/handlers/sessions-handler.d.ts +18 -0
- package/dist/rest/handlers/sessions-handler.js +56 -0
- package/dist/rest/handlers/sessions-handler.js.map +1 -0
- package/dist/rest/handlers/status-handler.d.ts +7 -0
- package/dist/rest/handlers/status-handler.js +313 -0
- package/dist/rest/handlers/status-handler.js.map +1 -0
- package/dist/rest/handlers/stop-handler.d.ts +7 -0
- package/dist/rest/handlers/stop-handler.js +317 -0
- package/dist/rest/handlers/stop-handler.js.map +1 -0
- package/dist/widgets/220.js +446 -0
- package/dist/widgets/220.js.map +1 -0
- package/dist/widgets/331.js +2 -0
- package/dist/widgets/331.js.map +1 -0
- package/dist/widgets/403.js +2 -0
- package/dist/widgets/403.js.map +1 -0
- package/dist/widgets/406.js +35 -0
- package/dist/widgets/406.js.map +1 -0
- package/dist/widgets/455.js +2 -0
- package/dist/widgets/455.js.map +1 -0
- package/dist/widgets/482.js +2 -0
- package/dist/widgets/482.js.map +1 -0
- package/dist/widgets/485.js +2 -0
- package/dist/widgets/485.js.map +1 -0
- package/dist/widgets/527.js +2 -0
- package/dist/widgets/527.js.map +1 -0
- package/dist/widgets/628.js +2 -0
- package/dist/widgets/628.js.map +1 -0
- package/dist/widgets/694.js +2 -0
- package/dist/widgets/694.js.map +1 -0
- package/dist/widgets/712.js +2 -0
- package/dist/widgets/712.js.map +1 -0
- package/dist/widgets/866.js +2 -0
- package/dist/widgets/866.js.map +1 -0
- package/dist/widgets/915.js +39 -0
- package/dist/widgets/915.js.map +1 -0
- package/dist/widgets/957.js +10 -0
- package/dist/widgets/957.js.map +1 -0
- package/dist/widgets/983.js +2 -0
- package/dist/widgets/983.js.map +1 -0
- package/dist/widgets/@mf-types.d.ts +3 -0
- package/dist/widgets/@mf-types.zip +0 -0
- package/dist/widgets/__federation_expose_AgentsPage.js +2 -0
- package/dist/widgets/__federation_expose_AgentsPage.js.map +1 -0
- package/dist/widgets/mf-manifest.json +260 -0
- package/dist/widgets/mf-stats.json +305 -0
- package/dist/widgets/remoteEntry.js +7 -0
- package/dist/widgets/remoteEntry.js.map +1 -0
- package/dist/ws/session-stream-handler.d.ts +8 -0
- package/dist/ws/session-stream-handler.js +409 -0
- package/dist/ws/session-stream-handler.js.map +1 -0
- package/package.json +83 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/ui/event-renderer.ts","../../../src/cli/commands/run.ts"],"names":["state","fs","pendingSessionWrite","detailedTrace"],"mappings":";;;;;;;;;;;AAaA,IAAM,GAAA,GAAM,OAAA;AACZ,IAAM,KAAA,GAAQ,SAAA;AAEd,IAAM,KAAA,GAAQ;AAAA;AAAA,EAEZ,OAAA,EAAS,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA,EAC7C,KAAA,EAAO,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA,EAC3C,OAAA,EAAS,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA,EAC7C,IAAA,EAAM,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA;AAAA,EAG1C,GAAA,EAAK,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,GAAA,EAAM,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA,EACzC,IAAA,EAAM,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,EAAA,EAAK,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA,EACzC,MAAA,EAAQ,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,QAAA,EAAW,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA;AAAA,EACjD,OAAA,EAAS,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,QAAA,EAAW,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA;AAAA,EAClD,SAAA,EAAW,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,QAAA,EAAW,CAAC,GAAG,KAAK,CAAA,CAAA;AAAA;AAAA,EACpD,SAAA,EAAW,CAAC,CAAA,KAAc,CAAA,EAAG,GAAG,CAAA,SAAA,EAAY,CAAC,GAAG,KAAK,CAAA;AAAA;AACvD,CAAA;AAGA,IAAM,GAAA,GAAM;AAAA,EACV,OAAA,EAAS,QAAA;AAAA,EACT,QAAA,EAAU,QAAA;AAAA,EACV,UAAA,EAAY,QAAA;AAAA,EACZ,WAAA,EAAa,QAAA;AAAA,EACb,UAAA,EAAY,QAAA;AAAA,EACZ,QAAA,EAAU,QAAA;AAAA,EACV,KAAA,EAAO,QAGT,CAAA;AAEA,IAAM,OAAA,GAAU;AAAA,EACd,OAAA,EAAS,KAAA,CAAM,OAAA,CAAQ,QAAG,CAAA;AAAA,EAC1B,KAAA,EAAO,KAAA,CAAM,KAAA,CAAM,QAAG,CAAA;AAAA,EAGtB,QAAA,EAAU,QAAA;AAAA,EAEV,IAAA,EAAM,QAAA;AAAA,EAIN,MAAA,EAAQ,WAAA;AAAA,EACR,OAAA,EAAS,QAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AAgBA,SAAS,eAAe,EAAA,EAAoB;AAC1C,EAAA,IAAI,KAAK,GAAA,EAAM;AAAC,IAAA,OAAO,GAAG,EAAE,CAAA,EAAA,CAAA;AAAA,EAAK;AACjC,EAAA,IAAI,KAAK,GAAA,EAAO;AAAC,IAAA,OAAO,CAAA,EAAA,CAAI,EAAA,GAAK,GAAA,EAAM,OAAA,CAAQ,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,EAAI;AACrD,EAAA,OAAO,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,EAAA,GAAK,GAAK,CAAC,CAAA,EAAA,EAAK,IAAA,CAAK,KAAA,CAAO,EAAA,GAAK,GAAA,GAAS,GAAI,CAAC,CAAA,CAAA,CAAA;AACtE;AAEA,SAAS,UAAA,CAAW,IAAA,EAAc,MAAA,GAAS,EAAA,EAAY;AACrD,EAAA,IAAI,IAAA,CAAK,UAAU,MAAA,EAAQ;AAAC,IAAA,OAAO,IAAA;AAAA,EAAK;AACxC,EAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,EAAA,IAAI,KAAA,CAAM,UAAU,CAAA,EAAG;AAAC,IAAA,OAAO,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,CAAC,SAAS,CAAC,CAAA;AAAA,EAAE;AAC/D,EAAA,OAAO,OAAO,KAAA,CAAM,KAAA,CAAM,EAAE,CAAA,CAAE,IAAA,CAAK,GAAG,CAAC,CAAA,CAAA;AACzC;AAEA,SAAS,aAAa,KAAA,EAAkC;AACtD,EAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AAKnB,EAAA,MAAM,OAAO,OAAO,IAAA,CAAK,gBAAA,KAAqB,QAAA,GAAW,KAAK,gBAAA,GAAmB,IAAA;AACjF,EAAA,MAAM,YAAY,OAAO,IAAA,CAAK,qBAAA,KAA0B,QAAA,GAAW,KAAK,qBAAA,GAAwB,IAAA;AAChG,EAAA,MAAM,QAAQ,OAAO,IAAA,CAAK,iBAAA,KAAsB,QAAA,GAAW,KAAK,iBAAA,GAAoB,IAAA;AACpF,EAAA,IAAI,IAAA,KAAS,IAAA,IAAQ,SAAA,KAAc,IAAA,IAAQ,UAAU,IAAA,EAAM;AACzD,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,MAAM,GAAA,GAAM,CAAC,KAAA,KAAkC,KAAA,KAAU,OAAO,GAAA,GAAM,KAAA,CAAM,eAAe,OAAO,CAAA;AAClG,EAAA,OAAO,CAAA,OAAA,EAAU,GAAA,CAAI,IAAI,CAAC,CAAA,QAAA,EAAW,GAAA,CAAI,KAAK,CAAC,CAAA,QAAA,EAAW,GAAA,CAAI,SAAS,CAAC,CAAA,MAAA,CAAA;AAC1E;AAMA,SAAS,YAAA,CAAa,KAAA,EAAe,OAAA,EAAgC,KAAA,GAAQ,EAAA,EAAY;AACvF,EAAA,MAAM,QAAA,GAAW,MAAM,MAAA,GAAS,CAAA;AAChC,EAAA,MAAM,OAAA,GAAU,CAAA;AAChB,EAAA,MAAM,QAAA,GAAW,KAAA,GAAQ,OAAA,GAAU,QAAA,GAAW,CAAA;AAC9C,EAAA,OAAO,OAAA;AAAA,IACL,CAAA,EAAG,IAAI,OAAO,CAAA,EAAG,IAAI,UAAA,CAAW,MAAA,CAAO,OAAO,CAAC,CAAA,CAAA,EAAI,KAAK,IAAI,GAAA,CAAI,UAAA,CAAW,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAC,CAAC,CAAA,EAAG,GAAA,CAAI,QAAQ,CAAA;AAAA,GACzH;AACF;AAEA,SAAS,eAAA,CAAgB,OAAA,EAAgC,KAAA,GAAQ,EAAA,EAAY;AAC3E,EAAA,OAAO,OAAA,CAAQ,CAAA,EAAG,GAAA,CAAI,UAAU,GAAG,GAAA,CAAI,UAAA,CAAW,MAAA,CAAO,KAAA,GAAQ,CAAC,CAAC,CAAA,EAAG,GAAA,CAAI,WAAW,CAAA,CAAE,CAAA;AACzF;AAEA,SAAS,aAAA,CAAc,SAAiB,OAAA,EAAwC;AAC9E,EAAA,OAAO,GAAG,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAC,IAAI,OAAO,CAAA,CAAA;AAC5C;AAMO,SAAS,oBAAoB,OAAA,EAKb;AACrB,EAAA,MAAM,EAAE,UAAU,IAAA,EAAM,cAAA,GAAiB,MAAM,cAAA,GAAiB,KAAA,EAAO,SAAA,GAAY,KAAA,EAAM,GAAI,OAAA;AAE7F,EAAA,MAAM,KAAA,GAAqB;AAAA,IACzB,cAAA,EAAgB,IAAA;AAAA,IAChB,WAAA,EAAa,KAAA;AAAA,IACb,WAAA,EAAa;AAAA,GACf;AAEA,EAAA,OAAO,CAAC,KAAA,KAAsB;AAG5B,IAAA,QAAQ,MAAM,IAAA;AAAM;AAAA;AAAA;AAAA,MAIlB,KAAK,eAAA,EAAiB;AACpB,QAAA,KAAA,CAAM,cAAA,GAAiB;AAAA,UACrB,EAAA,EAAI,MAAM,IAAA,CAAK,SAAA;AAAA,UACf,KAAA,EAAO,MAAM,IAAA,CAAK,KAAA;AAAA,UAClB,KAAA,EAAO,MAAM,IAAA,CAAK;AAAA,SACpB;AACA,QAAA,KAAA,CAAM,WAAA,GAAc,CAAA;AAEpB,QAAA,MAAM,UAAA,GAAa,GAAG,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,KAAK,CAAA,CAAA;AAC9D,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAC,CAAA;AACtC,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,MAAM,MAAA,CAAO,CAAA,EAAG,GAAA,CAAI,KAAK,GAAG,GAAA,CAAI,UAAU,CAAA,CAAE,CAAA,GAC5C,aAAa,CAAA,QAAA,EAAW,UAAU,CAAA,CAAA,EAAI,KAAA,CAAM,WAAW,EAAE;AAAA,SAC3D;AACA,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,QAAQ,IAAI,GAAA,GAC7B,aAAA;AAAA,YACE,GAAG,OAAA,CAAQ,OAAO,IAAI,KAAA,CAAM,IAAA,CAAK,YAAY,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,GAAG,KAAA,CAAM,IAAA,CAAK,YAAY,MAAA,GAAS,EAAA,GAAK,QAAQ,EAAE,CAAA,CAAA;AAAA,YAC3G,KAAA,CAAM;AAAA;AACR,SACF;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA,GAAM,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAC,CAAA;AAC5E,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,aAAA,EAAe;AAClB,QAAA,MAAM,SAAS,KAAA,CAAM,IAAA,CAAK,OAAA,GACtB,KAAA,CAAM,QAAQ,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA,KAAA,CAAO,IACvC,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,OAAA,CAAS,CAAA;AAEzC,QAAA,OAAA,CAAQ,GAAA,CAAI,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA,GAAM,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAC,CAAA;AAC5E,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,KAAA,CAAM,OAAO,GAAA,CAAI,QAAQ,IAAI,GAAA,GAC7B,aAAA,CAAc,MAAA,EAAQ,KAAA,CAAM,SAAS;AAAA,SACvC;AACA,QAAA,OAAA,CAAQ,GAAA;AAAA,UACN,KAAA,CAAM,OAAO,GAAA,CAAI,QAAQ,IAAI,GAAA,GAC7B,eAAA,CAAgB,KAAA,CAAM,SAAA,EAAW,EAAE;AAAA,SACrC;AAEA,QAAA,KAAA,CAAM,cAAA,GAAiB,IAAA;AACvB,QAAA,KAAA,CAAM,WAAA,GAAc,CAAA;AACpB,QAAA;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,KAAK,aAAA,EAAe;AAClB,QAAA,KAAA,CAAM,WAAA,GAAc,IAAA;AAGpB,QAAA,MAAM,UAAA,GAAa,KAAA,CAAM,cAAA,GACrB,KAAA,CAAM,OAAO,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA,GAAM,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,IAAI,GAAA,GACnE,EAAA;AAEJ,QAAA,OAAA,CAAQ,IAAI,UAAU,CAAA;AACtB,QAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,YAAA,CAAa,CAAA,OAAA,EAAU,KAAA,CAAM,IAAA,CAAK,IAAI,CAAA,CAAA,CAAA,EAAK,KAAA,CAAM,OAAA,EAAS,EAAE,CAAC,CAAA;AACtF,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,UACvB,GAAG,OAAA,CAAQ,KAAK,IAAI,KAAA,CAAM,IAAA,CAAK,KAAK,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,GAAG,KAAA,CAAM,IAAA,CAAK,KAAK,MAAA,GAAS,EAAA,GAAK,QAAQ,EAAE,CAAA,CAAA;AAAA,UAC3F,KAAA,CAAM;AAAA,SACP,CAAA;AACD,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,UACvB,KAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAU,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,mBAAA,EAAsB,KAAA,CAAM,IAAA,CAAK,aAAa,CAAA,CAAE,CAAA;AAAA,UACxF,KAAA,CAAM;AAAA,SACP,CAAA;AAED,QAAA,KAAA,CAAM,WAAA,GAAc,KAAA,CAAM,cAAA,GAAiB,CAAA,GAAI,CAAA;AAC/C,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,WAAA,EAAa;AAChB,QAAA,MAAM,UAAA,GAAa,KAAA,CAAM,cAAA,GACrB,KAAA,CAAM,OAAO,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA,GAAM,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,IAAI,GAAA,GACnE,EAAA;AAEJ,QAAA,MAAM,SAAS,KAAA,CAAM,IAAA,CAAK,OAAA,GACtB,KAAA,CAAM,QAAQ,CAAA,EAAG,OAAA,CAAQ,OAAO,CAAA,QAAA,CAAU,IAC1C,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,OAAA,CAAS,CAAA;AAEzC,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAC,CAAA;AACpD,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,UACvB,GAAG,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,IAAI,cAAA,CAAe,KAAA,CAAM,IAAA,CAAK,UAAU,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,UAAU,UAAU,CAAC,CAAA,CAAA;AAAA,UACrG,KAAA,CAAM;AAAA,SACP,CAAA;AAGD,QAAA,IAAI,KAAA,CAAM,KAAK,OAAA,EAAS;AACtB,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAC,CAAA;AACpD,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,KAAA,CAAM,KAAK,mBAAY,CAAA;AAAA,YACvB,KAAA,CAAM;AAAA,WACP,CAAA;AAED,UAAA,MAAM,YAAA,GAAe,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,MAAM,IAAI,CAAA;AAClD,UAAA,KAAA,MAAW,QAAQ,YAAA,EAAc;AAC/B,YAAA,IAAI,IAAA,CAAK,MAAK,EAAG;AAEf,cAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AAC5B,cAAA,IAAI,WAAA,GAAc,EAAA;AAClB,cAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,gBAAA,IAAI,WAAA,CAAY,MAAA,GAAS,IAAA,CAAK,MAAA,GAAS,EAAA,EAAI;AACzC,kBAAA,IAAI,WAAA,EAAa;AACf,oBAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,aAAA,CAAc,CAAA,GAAA,EAAM,WAAW,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,kBAC5E;AACA,kBAAA,WAAA,GAAc,IAAA;AAAA,gBAChB,CAAA,MAAO;AACL,kBAAA,WAAA,GAAc,WAAA,GAAc,CAAA,EAAG,WAAW,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA,GAAK,IAAA;AAAA,gBACzD;AAAA,cACF;AACA,cAAA,IAAI,WAAA,EAAa;AACf,gBAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,aAAA,CAAc,CAAA,GAAA,EAAM,WAAW,CAAA,CAAA,EAAI,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,cAC5E;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,QAAA,IAAI,KAAA,CAAM,KAAK,aAAA,CAAc,MAAA,GAAS,KAAK,KAAA,CAAM,IAAA,CAAK,YAAA,CAAa,MAAA,GAAS,CAAA,EAAG;AAC7E,UAAA,MAAM,KAAA,GAAQ,CAAC,GAAG,KAAA,CAAM,KAAK,YAAA,EAAc,GAAG,KAAA,CAAM,IAAA,CAAK,aAAa,CAAA;AACtE,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,KAAA,CAAM,GAAA,CAAI,CAAA,OAAA,EAAU,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAA,CAAA,KAAK,UAAA,CAAW,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,EAAG,KAAA,CAAM,MAAA,GAAS,CAAA,GAAI,CAAA,EAAA,EAAK,KAAA,CAAM,MAAA,GAAS,CAAC,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,YAChI,KAAA,CAAM;AAAA,WACP,CAAA;AAAA,QACH;AAEA,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,eAAA,CAAgB,KAAA,CAAM,OAAA,EAAS,EAAE,CAAC,CAAA;AAE3D,QAAA,KAAA,CAAM,WAAA,GAAc,KAAA;AACpB,QAAA,KAAA,CAAM,WAAA,GAAc,KAAA,CAAM,cAAA,GAAiB,CAAA,GAAI,CAAA;AAC/C,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,aAAA,EAAe;AAClB,QAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,UACvB,CAAA,EAAG,OAAA,CAAQ,KAAK,CAAA,CAAA,EAAI,MAAM,KAAA,CAAM,QAAQ,CAAC,CAAA,CAAA,EAAI,MAAM,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAA;AAAA,UAC1E,KAAA,CAAM;AAAA,SACP,CAAA;AACD,QAAA;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,KAAK,iBAAA,EAAmB;AACtB,QAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,KAAA,CAAM,OAAA,CAAQ,GAAA,CAAI,QAAQ,CAAC,CAAA;AACpD,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,KAAA,CAAM,GAAA,CAAI,CAAA,6BAAA,EAAiB,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,aAAa,CAAA,mBAAA,CAAM,CAAA;AAAA,YACjF,KAAA,CAAM;AAAA,WACP,CAAA;AAAA,QACH;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,WAAA,EAAa;AAChB,QAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,MAAM,SAAA,GAAY,KAAA,CAAM,IAAA,CAAK,SAAA,KAAc,MAAA,GAAY,KAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,CAAE,CAAA,GAAI,EAAA;AAChG,UAAA,MAAM,WAAW,SAAA,GAAY,KAAA,CAAM,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,YAAY,CAAA,OAAA,EAAU,MAAM,IAAA,CAAK,SAAA,IAAa,CAAC,CAAA,QAAA,EAAW,KAAA,CAAM,KAAK,iBAAA,IAAqB,CAAC,aAAa,CAAA,GAAI,EAAA;AACnK,UAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,UAAA,GAAa,aAAA;AAAA,YAChC,CAAA,EAAG,KAAA,CAAM,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,aAAa,CAAC,CAAA,EAAG,SAAS,GAAG,QAAQ,CAAA,CAAA;AAAA,YACpF,KAAA,CAAM;AAAA,WACP,CAAA;AAAA,QACH;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,SAAA,EAAW;AACd,QAAA,IAAI,OAAA,EAAS;AAEX,UAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,CAAA,EAAA,CAAI,CAAA;AACzB,UAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,UAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,UAAA,GAAa,UAAU,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,CAAA,GAAK,EAAA;AAC9E,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,CAAA,EAAG,MAAM,MAAA,CAAO,OAAA,CAAQ,QAAQ,CAAC,CAAA,SAAA,EAAY,KAAA,CAAM,GAAA,CAAI,CAAA,CAAA,EAAI,cAAA,CAAe,MAAM,IAAA,CAAK,UAAU,CAAC,CAAA,EAAA,EAAK,KAAA,CAAM,KAAK,UAAU,CAAA,IAAA,EAAO,SAAS,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA;AAAA,YAC9I,KAAA,CAAM;AAAA,WACP,CAAA;AAGD,UAAA,IAAI,KAAA,CAAM,KAAK,OAAA,EAAS;AACtB,YAAA,MAAM,MAAA,GAAS,SAAA,GAAY,GAAA,GAAO,cAAA,GAAiB,GAAA,GAAM,GAAA;AACzD,YAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,CAAE,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAAE,IAAA,EAAK;AAC7E,YAAA,IAAI,OAAA,EAAS;AACX,cAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,gBACvB,KAAA,CAAM,GAAA,CAAI,CAAA,aAAA,EAAS,OAAO,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,MAAA,GAAS,MAAA,GAAS,KAAA,GAAQ,EAAE,CAAA,CAAA,CAAG,CAAA;AAAA,gBAC/E,KAAA,CAAM;AAAA,eACP,CAAA;AAAA,YACH;AAAA,UACF;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,KAAK,YAAA,EAAc;AACjB,QAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,QAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,QAAA;AAC5B,QAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,QAAA;AAExB,QAAA,IAAI,OAAA,GAAU,EAAA;AACd,QAAA,IAAI,SAAA,EAAW;AAEb,UAAA,MAAM,QAAA,GAAW,MAAM,IAAA,CAAK,KAAA;AAC5B,UAAA,IAAI,YAAY,MAAA,CAAO,IAAA,CAAK,QAAQ,CAAA,CAAE,SAAS,CAAA,EAAG;AAChD,YAAA,MAAM,GAAA,GAAM,IAAA,CAAK,SAAA,CAAU,QAAQ,CAAA;AACnC,YAAA,MAAM,MAAA,GAAS,GAAA;AACf,YAAA,OAAA,GAAU,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,IAAK,GAAA,CAAI,MAAA,GAAS,MAAA,GAAS,KAAA,GAAQ,GAAG,CAAC,CAAA,CAAA;AAAA,UACpF;AAAA,QACF,CAAA,MAAA,IAAW,MAAM,QAAA,EAAU;AACzB,UAAA,OAAA,GAAU,CAAA,CAAA,EAAI,MAAM,GAAA,CAAI,UAAA,CAAW,KAAK,QAAA,EAAoB,EAAE,CAAC,CAAC,CAAA,CAAA;AAAA,QAClE,CAAA,MAAA,IAAW,MAAM,KAAA,EAAO;AACtB,UAAA,OAAA,GAAU,IAAI,KAAA,CAAM,GAAA,CAAI,IAAK,IAAA,CAAK,KAAA,CAAiB,MAAM,CAAA,EAAG,EAAE,CAAC,CAAA,EAAI,KAAK,KAAA,CAAiB,MAAA,GAAS,KAAK,KAAA,GAAQ,EAAE,GAAG,CAAC,CAAA,CAAA;AAAA,QACvH,CAAA,MAAA,IAAW,MAAM,OAAA,EAAS;AACxB,UAAA,OAAA,GAAU,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAM,IAAA,CAAK,OAAA,CAAmB,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,CAAC,CAAA,CAAA;AAAA,QACvE;AAEA,QAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,UAAA,GAAa,aAAA;AAAA,UAChC,CAAA,EAAG,KAAA,CAAM,SAAA,CAAU,OAAA,CAAQ,IAAI,CAAC,CAAA,CAAA,EAAI,KAAA,CAAM,SAAA,CAAU,QAAQ,CAAC,CAAA,EAAG,OAAO,CAAA,CAAA;AAAA,UACvE,KAAA,CAAM;AAAA,SACP,CAAA;AACD,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,UAAA,EAAY;AACf,QAAA,MAAM,MAAA,GAAS,KAAA,CAAM,IAAA,CAAK,OAAA,GACtB,CAAA,CAAA,EAAI,QAAQ,OAAO,CAAA,CAAA,GACnB,CAAA,CAAA,EAAI,OAAA,CAAQ,KAAK,CAAA,CAAA;AAErB,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,MAAM,CAAA,CAAA,EAAI,KAAA,CAAM,GAAA,CAAI,cAAA,CAAe,KAAA,CAAM,IAAA,CAAK,UAAU,CAAC,CAAC;AAAA,CAAI,CAAA;AAGtF,QAAA,IAAI,cAAA,EAAgB;AAClB,UAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,UAAA,MAAM,IAAA,GAAO,MAAM,IAAA,CAAK,QAAA;AACxB,UAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,MAAA;AAG1B,UAAA,IAAI,UAAU,OAAA,EAAS;AACrB,YAAA,MAAM,YAAA,GAAe,YAAY,GAAA,GAAO,GAAA;AACxC,YAAA,IAAI,SAAA,EAAW;AAEb,cAAA,MAAM,SAAA,GAAY,MAAA,CAAO,KAAA,CAAM,CAAA,EAAG,YAAY,CAAA;AAC9C,cAAA,MAAM,KAAA,GAAQ,SAAA,CAAU,KAAA,CAAM,IAAI,CAAA;AAClC,cAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,gBAAA,IAAI,IAAA,CAAK,MAAK,EAAG;AACf,kBAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,oBACvB,KAAA,CAAM,GAAA,CAAI,CAAA,cAAA,EAAU,IAAI,CAAA,CAAE,CAAA;AAAA,oBAC1B,KAAA,CAAM;AAAA,mBACP,CAAA;AAAA,gBACH;AAAA,cACF;AACA,cAAA,IAAI,MAAA,CAAO,SAAS,YAAA,EAAc;AAChC,gBAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,kBACvB,MAAM,GAAA,CAAI,CAAA,mBAAA,EAAe,MAAA,CAAO,MAAA,GAAS,YAAY,CAAA,YAAA,CAAc,CAAA;AAAA,kBACnE,KAAA,CAAM;AAAA,iBACP,CAAA;AAAA,cACH;AAAA,YACF,CAAA,MAAO;AAEL,cAAA,MAAM,WAAA,GAAc,MAAA,CACjB,KAAA,CAAM,CAAA,EAAG,YAAY,CAAA,CACrB,OAAA,CAAQ,KAAA,EAAO,GAAG,CAAA,CAClB,OAAA,CAAQ,MAAA,EAAQ,GAAG,EACnB,IAAA,EAAK;AACR,cAAA,IAAI,WAAA,IAAe,WAAA,CAAY,MAAA,GAAS,EAAA,EAAI;AAC1C,gBAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,kBACvB,KAAA,CAAM,GAAA,CAAI,CAAA,cAAA,EAAU,WAAW,CAAA,EAAG,OAAO,MAAA,GAAS,YAAA,GAAe,KAAA,GAAQ,EAAE,CAAA,CAAE,CAAA;AAAA,kBAC7E,KAAA,CAAM;AAAA,iBACP,CAAA;AAAA,cACH;AAAA,YACF;AAAA,UACF;AAGA,UAAA,IAAI,IAAA,EAAM,OAAA,IAAW,CAAC,MAAA,EAAQ;AAC5B,YAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,cACvB,KAAA,CAAM,IAAI,CAAA,iBAAA,EAAW,IAAA,CAAK,QAAmB,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,cAC3D,KAAA,CAAM;AAAA,aACP,CAAA;AAAA,UACH;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,YAAA,EAAc;AACjB,QAAA,OAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,CAAA,EAAI,OAAA,CAAQ,KAAK;AAAA,CAAI,CAAA;AAC1C,QAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,UACvB,KAAA,CAAM,KAAA,CAAM,CAAA,iBAAA,EAAU,KAAA,CAAM,IAAA,CAAK,MAAM,KAAA,CAAM,CAAA,EAAG,EAAE,CAAC,CAAA,CAAE,CAAA;AAAA,UACrD,KAAA,CAAM;AAAA,SACP,CAAA;AACD,QAAA;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,KAAK,cAAA,EAAgB;AACnB,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,KAAA,CAAM,GAAA,CAAI,CAAA,EAAG,OAAA,CAAQ,MAAM,CAAA,OAAA,EAAU,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,IAAA,EAAO,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,CAAE,CAAA;AAAA,YACnF,KAAA,CAAM;AAAA,WACP,CAAA;AAAA,QACH;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,iBAAA,EAAmB;AACtB,QAAA,MAAM,UAAA,GAAa,aAAa,KAAK,CAAA;AACrC,QAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,KAAA,IAAS,UAAA;AAClC,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,GAAA,EAAK,IAAA,CAAK,KAAA,CAAM,KAAA,CAAM,IAAA,CAAK,QAAA,IAAY,CAAC,CAAC,CAAC,CAAA;AAChF,QAAA,MAAM,OAAA,GAAU,KAAA,CAAM,IAAA,CAAK,OAAA,IAAW,EAAA;AAEtC,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,UAAA,MAAM,IAAA,GAAO,CAAA,CAAA,EAAI,KAAK,CAAA,EAAA,EAAK,QAAQ,IAAI,OAAA,GAAU,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,GAAK,EAAE,CAAA,CAAA;AACrE,UAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,aAAA,CAAc,KAAA,CAAM,KAAK,IAAI,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AACvE,UAAA,IAAI,UAAA,EAAY;AACd,YAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,EAAO,UAAU,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,UACvF;AAAA,QACF,CAAA,MAAA,IAAW,YAAY,KAAA,KAAU,MAAA,IAAU,UAAU,MAAA,CAAA,KAAY,QAAA,KAAa,GAAA,IAAO,QAAA,KAAa,CAAA,CAAA,EAAI;AACpG,UAAA,MAAM,YAAA,GAAe,UAAA,GAAa,CAAA,GAAA,EAAM,UAAU,CAAA,CAAA,GAAK,EAAA;AACvD,UAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,CAAA,CAAA,EAAI,KAAK,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,EAAI,OAAO,CAAA,EAAG,YAAY,CAAA,CAAE,CAAA;AAAA,QACrE;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,eAAA,EAAiB;AACpB,QAAA,MAAM,UAAA,GAAa,aAAa,KAAK,CAAA;AACrC,QAAA,IAAI,OAAA,IAAW,KAAA,CAAM,IAAA,CAAK,OAAA,EAAS;AACjC,UAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,MAAM,IAAA,CAAK,CAAA,QAAA,EAAW,KAAA,CAAM,IAAA,CAAK,MAAM,CAAA,EAAG,KAAA,CAAM,IAAA,CAAK,OAAA,GAAU,MAAM,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA,CAAA,GAAK,EAAE,CAAA,CAAE,CAAA;AAAA,YAChG,KAAA,CAAM;AAAA,WACP,CAAA;AACD,UAAA,IAAI,UAAA,EAAY;AACd,YAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,IAAA,EAAO,UAAU,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,UACvF;AAEA,UAAA,IAAI,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,SAAA,IAAa,MAAM,SAAA,EAAW;AACtD,YAAA,MAAM,MAAM,KAAA,CAAM,SAAA;AAClB,YAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,yCAAA,EAA4C,GAAG,CAAA,UAAA,CAAY,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAC7H,YAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,yCAAA,EAA4C,GAAG,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,UACrH;AAAA,QACF;AAEA,QAAA,IAAI,CAAC,YAAY,KAAA,CAAM,IAAA,CAAK,WAAW,MAAA,IAAU,KAAA,CAAM,IAAA,CAAK,MAAA,KAAW,OAAA,CAAA,EAAU;AAC/E,UAAA,MAAM,YAAA,GAAe,UAAA,GAAa,CAAA,EAAA,EAAK,UAAU,CAAA,CAAA,CAAA,GAAM,EAAA;AACvD,UAAA,OAAA,CAAQ,GAAA;AAAA,YACN,KAAA,CAAM,KAAK,MAAA,KAAW,MAAA,GAClB,GAAG,OAAA,CAAQ,OAAO,CAAA,CAAA,EAAI,KAAA,CAAM,IAAA,CAAK,OAAO,GAAG,YAAY,CAAA,CAAA,GACvD,GAAG,OAAA,CAAQ,KAAK,IAAI,KAAA,CAAM,IAAA,CAAK,OAAO,CAAA,EAAG,YAAY,CAAA;AAAA,WAC3D;AAAA,QACF;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,qBAAA,EAAuB;AAC1B,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,UAAA,MAAM,aAAA,GAAwC;AAAA,YAC5C,YAAA,EAAc,QAAA;AAAA,YACd,SAAA,EAAW,WAAA;AAAA,YACX,OAAA,EAAS,QAAA;AAAA,YACT,aAAA,EAAe,WAAA;AAAA,YACf,KAAA,EAAO,QAAA;AAAA,YACP,UAAA,EAAY;AAAA,WACd;AACA,UAAA,MAAM,IAAA,GAAO,aAAA,CAAc,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,IAAK,MAAA;AACnD,UAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,YACvB,KAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAK,IAAI,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,UAAU,CAAA,EAAA,EAAK,KAAA,CAAM,IAAA,CAAK,QAAQ,CAAA,CAAE,CAAA;AAAA,YACvE,KAAA,CAAM;AAAA,WACP,CAAA;AAAA,QACH;AACA,QAAA;AAAA,MACF;AAAA,MAEA,KAAK,WAAA,EAAa;AAChB,QAAA,IAAI,CAAC,SAAA,EAAW;AAAE,UAAA;AAAA,QAAO;AACzB,QAAA,MAAM,UAAA,GAAa,cAAc,KAAK,CAAA;AACtC,QAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,SAAA,KAAc,SAAY,CAAA,QAAA,EAAW,KAAA,CAAM,IAAA,CAAK,SAAS,CAAA,CAAA,CAAA,GAAM,EAAA;AAC5F,QAAA,OAAA,CAAQ,IAAI,UAAA,GAAa,aAAA;AAAA,UACvB,KAAA,CAAM,GAAA,CAAI,CAAA,kCAAA,EAAsB,SAAS,CAAA,mBAAA,CAAM,CAAA;AAAA,UAC/C,KAAA,CAAM;AAAA,SACP,CAAA;AAED,QAAA,KAAA,MAAW,QAAQ,KAAA,CAAM,IAAA,CAAK,YAAA,CAAa,KAAA,CAAM,IAAI,CAAA,EAAG;AACtD,UAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAK,IAAI,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,QAC/E;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,aAAA,CAAc,KAAA,CAAM,IAAI,kDAAoB,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AACtF,QAAA,KAAA,MAAW,CAAA,IAAK,KAAA,CAAM,IAAA,CAAK,QAAA,EAAU;AACnC,UAAA,MAAM,SAAA,GAAY,CAAA,CAAA,EAAI,CAAA,CAAE,IAAI,CAAA,CAAA,CAAA;AAC5B,UAAA,MAAM,UAAU,CAAA,CAAE,OAAA;AAElB,UAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAChC,UAAA,MAAM,YAAY,CAAA,EAAG,SAAS,IAAI,KAAA,CAAM,CAAC,KAAK,EAAE,CAAA,CAAA;AAChD,UAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,EAAA,EAAK,SAAS,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAClF,UAAA,KAAA,MAAW,IAAA,IAAQ,KAAA,CAAM,KAAA,CAAM,CAAC,CAAA,EAAG;AACjC,YAAA,OAAA,CAAQ,GAAA,CAAI,UAAA,GAAa,aAAA,CAAc,KAAA,CAAM,GAAA,CAAI,CAAA,MAAA,EAAS,IAAI,CAAA,CAAE,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA,UACnF;AAAA,QACF;AACA,QAAA,OAAA,CAAQ,GAAA,CAAI,aAAa,aAAA,CAAc,KAAA,CAAM,IAAI,oDAAsB,CAAA,EAAG,KAAA,CAAM,OAAO,CAAC,CAAA;AACxF,QAAA;AAAA,MACF;AAIE;AACJ,EACF,CAAA;AAEA,EAAA,SAAS,cAAcA,MAAAA,EAA4B;AACjD,IAAA,IAAIA,MAAAA,CAAM,cAAA,IAAkBA,MAAAA,CAAM,WAAA,EAAa;AAC7C,MAAA,OAAO,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,GAAI,MAAM,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA;AAAA,IAC5E;AACA,IAAA,IAAIA,OAAM,cAAA,EAAgB;AACxB,MAAA,OAAO,KAAA,CAAM,MAAA,CAAO,GAAA,CAAI,QAAQ,CAAA,GAAI,MAAM,KAAA,CAAM,SAAA,CAAU,GAAA,CAAI,QAAQ,CAAA,GAAI,GAAA;AAAA,IAC5E;AACA,IAAA,IAAIA,OAAM,WAAA,EAAa;AACrB,MAAA,OAAO,EAAA;AAAA,IACT;AACA,IAAA,OAAO,EAAA;AAAA,EACT;AACF;AASO,SAAS,qBAAA,GAA4C;AAC1D,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,OAAA,EAAS,KAAA;AAAA,IACT,cAAA,EAAgB,KAAA;AAAA,IAChB,cAAA,EAAgB;AAAA,GACjB,CAAA;AACH;AAKO,SAAS,sBAAA,GAA6C;AAC3D,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,OAAA,EAAS,IAAA;AAAA,IACT,cAAA,EAAgB,IAAA;AAAA,IAChB,cAAA,EAAgB;AAAA,GACjB,CAAA;AACH;AAKO,SAAS,mBAAA,GAA0C;AACxD,EAAA,OAAO,mBAAA,CAAoB;AAAA,IACzB,OAAA,EAAS,IAAA;AAAA,IACT,cAAA,EAAgB,IAAA;AAAA,IAChB,cAAA,EAAgB,IAAA;AAAA,IAChB,SAAA,EAAW;AAAA,GACZ,CAAA;AACH;;;AC/kBA,iBAAA,EAAkB;AA6ClB,SAAS,gBAAA,CAAiB,OAAgB,YAAA,EAAgC;AACxE,EAAA,IAAI,OAAO,UAAU,SAAA,EAAW;AAC9B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,MAAM,UAAA,GAAa,KAAA,CAAM,IAAA,EAAK,CAAE,WAAA,EAAY;AAC5C,IAAA,IAAI,CAAC,QAAQ,GAAA,EAAK,KAAA,EAAO,KAAK,IAAI,CAAA,CAAE,QAAA,CAAS,UAAU,CAAA,EAAG;AAAC,MAAA,OAAO,IAAA;AAAA,IAAK;AACvE,IAAA,IAAI,CAAC,SAAS,GAAA,EAAK,IAAA,EAAM,KAAK,KAAK,CAAA,CAAE,QAAA,CAAS,UAAU,CAAA,EAAG;AAAC,MAAA,OAAO,KAAA;AAAA,IAAM;AAAA,EAC3E;AACA,EAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,IAAA,OAAO,KAAA,KAAU,CAAA;AAAA,EACnB;AACA,EAAA,OAAO,YAAA;AACT;AAEA,IAAO,cAAQ,aAAA,CAAc;AAAA,EAC3B,EAAA,EAAI,WAAA;AAAA,EACJ,WAAA,EAAa,oEAAA;AAAA,EAEb,OAAA,EAAS;AAAA,IACP,MAAM,OAAA,CAAQ,GAAA,EAAsB,KAAA,EAAqC;AAEvE,MAAA,MAAM,KAAA,GAAS,MAAc,KAAA,IAAS,KAAA;AAEtC,MAAA,MAAM;AAAA,QACJ,IAAA;AAAA,QACA,UAAA,GAAa,GAAA,CAAI,GAAA,IAAO,OAAA,CAAQ,GAAA,EAAI;AAAA,QACpC,aAAA,GAAgB,GAAA;AAAA,QAChB,WAAA,GAAc,GAAA;AAAA,QACd,SAAS,UAAA,GAAa,IAAA;AAAA,QACtB,OAAO,QAAA,GAAW,KAAA;AAAA,QAClB,UAAU,WAAA,GAAc,KAAA;AAAA,QACxB,SAAA;AAAA,QACA,IAAA,GAAO,QAAA;AAAA,QACP,IAAA,GAAO,SAAA;AAAA,QACP,UAAA;AAAA,QACA,KAAA;AAAA,QACA,KAAA;AAAA,QACA,SAAS,UAAA,GAAa,KAAA;AAAA,QACtB,SAAS,UAAA,GAAa,KAAA;AAAA,QACtB,MAAM,OAAA,GAAU,KAAA;AAAA,QAChB,WAAW,SAAA,GAAY,KAAA;AAAA,QACvB,OAAO,QAAA,GAAW,KAAA;AAAA,QAClB,OAAA,EAAS,cAAA;AAAA,QACT,MAAA,EAAQ,cAAA;AAAA,QACR,MAAM,UAAA,GAAa;AAAA,OACrB,GAAI,KAAA;AAEJ,MAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,UAAA,EAAY,IAAI,CAAA;AACjD,MAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,QAAA,EAAU,KAAK,CAAA;AAC9C,MAAA,MAAM,QAAA,GAAW,gBAAA,CAAiB,WAAA,EAAa,KAAK,CAAA;AACpD,MAAA,MAAM,OAAA,GAAU,gBAAA,CAAiB,UAAA,EAAY,KAAK,CAAA;AAClD,MAAA,MAAM,gBAAA,GAAmB,gBAAA,CAAiB,UAAA,EAAY,KAAK,CAAA;AAC3D,MAAA,MAAM,IAAA,GAAO,gBAAA,CAAiB,OAAA,EAAS,KAAK,CAAA;AAC5C,MAAA,MAAM,MAAA,GAAS,gBAAA,CAAiB,SAAA,EAAW,KAAK,CAAA;AAChD,MAAA,MAAM,KAAA,GAAQ,gBAAA,CAAiB,QAAA,EAAU,KAAK,CAAA;AAI9C,MAAA,MAAM,cAAc,OAAO,cAAA,KAAmB,QAAA,IAAY,cAAA,GAAiB,IACvE,cAAA,GACA,MAAA;AAEJ,MAAA,MAAM,eAAA,GAAkB,WAAA,KAAgB,MAAA,GAAY,IAAI,iBAAgB,GAAI,MAAA;AAC5E,MAAA,IAAI,aAAA;AAEJ,MAAA,IAAI,eAAA,IAAmB,gBAAgB,MAAA,EAAW;AAChD,QAAA,aAAA,GAAgB,WAAW,MAAM;AAC/B,UAAA,eAAA,CAAgB,KAAA;AAAA,YACd,IAAI,KAAA,CAAM,CAAA,gCAAA,EAAmC,WAAW,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAA,CAAG;AAAA,WACxF;AAAA,QACF,CAAA,EAAG,cAAc,GAAI,CAAA;AAGrB,QAAA,aAAA,CAAc,KAAA,IAAQ;AAAA,MACxB;AAGA,MAAA,MAAM,gBAAgB,MAAM;AAC1B,QAAA,IAAI,kBAAkB,MAAA,EAAW;AAC/B,UAAA,YAAA,CAAa,aAAa,CAAA;AAC1B,UAAA,aAAA,GAAgB,MAAA;AAAA,QAClB;AAAA,MACF,CAAA;AAGA,MAAA,IAAI,CAAC,IAAA,EAAM;AACT,QAAA,IAAI,WAAW,SAAA,EAAW;AACxB,UAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,UAAA,IAAwB,IAAI,GAAA,IAAO,OAAA,CAAQ,KAAK,CAAA;AAC1F,UAAA,MAAM,QAAA,GAAW,cAAA,CAAe,kBAAA,CAAmB,SAAmB,CAAA;AACtE,UAAA,IAAI;AACF,YAAA,MAAM,GAAA,GAAM,MAAMC,QAAA,CAAG,QAAA,CAAS,UAAU,OAAO,CAAA;AAC/C,YAAA,MAAM,IAAA,GAAiB,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA;AACrC,YAAA,IAAI,IAAA,CAAK,WAAW,OAAA,EAAS;AAC3B,cAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,qCAAA,EAAwC,IAAA,CAAK,MAAM,CAAA,sBAAA,CAAwB,CAAA;AAC1F,cAAA,aAAA,EAAc;AACd,cAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,YACvB;AACA,YAAA,MAAM,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAC1C,YAAA,MAAM,YAAA,GAAe,EAAE,GAAG,IAAA,EAAM,MAAA,EAAQ,YAAqB,UAAA,EAAY,eAAA,EAAiB,4BAAA,EAA8B,SAAA,EAAW,UAAA,EAAW;AAC9I,YAAA,MAAMA,QAAA,CAAG,UAAU,QAAA,EAAU,IAAA,CAAK,UAAU,YAAA,EAAc,IAAA,EAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAC3E,YAAA,MAAM,mBAAA,GAAsB,IAAI,mBAAA,CAAoB,UAAA,IAAwB,IAAI,GAAA,IAAO,OAAA,CAAQ,KAAK,CAAA;AACpG,YAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,WAAA,CAAY,IAAI,CAAA;AACxD,YAAA,MAAM,mBAAA,CAAoB,mBAAmB,WAAA,EAAa,CAAA,EAAA,EAAK,UAAU,CAAA,oCAAA,CAAsC,CAAA,CAAE,MAAM,MAAM;AAAA,YAAC,CAAC,CAAA;AAC/H,YAAA,GAAA,CAAI,IAAI,OAAA,GAAU,CAAA,eAAA,EAAkB,aAAa,EAAE,CAAA,WAAA,EAAc,SAAS,CAAA,CAAA,CAAG,CAAA;AAC7E,YAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,4CAAA,EAA+C,SAAS,CAAA,CAAE,CAAA;AACzE,YAAA,aAAA,EAAc;AACd,YAAA,OAAO,EAAE,QAAA,EAAU,CAAA,EAAG,SAAA,EAA+B;AAAA,UACvD,CAAA,CAAA,MAAQ;AACN,YAAA,GAAA,CAAI,EAAA,EAAI,KAAA,GAAQ,CAAA,2BAAA,EAA8B,SAAS,CAAA,CAAE,CAAA;AACzD,YAAA,aAAA,EAAc;AACd,YAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,UACvB;AAAA,QACF;AACA,QAAA,GAAA,CAAI,EAAA,EAAI,QAAQ,2BAA2B,CAAA;AAC3C,QAAA,aAAA,EAAc;AACd,QAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,MACvB;AAGA,MAAA,IAAI,UAAA;AACJ,MAAA,IAAI,SAAS,SAAA,EAAW;AACtB,QAAA,UAAA,GAAa,EAAE,IAAA,EAAK;AAGpB,QAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,UAAA,UAAA,CAAW,OAAA,GAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,UAAA,EAAW;AAAA,QACxD,CAAA,MAAA,IAAW,SAAS,MAAA,EAAQ;AAC1B,UAAA,UAAA,CAAW,OAAA,GAAU,EAAE,IAAA,EAAM,MAAA,EAAQ,MAAM,WAAA,EAAa,KAAA,IAAS,EAAC,EAAG,MAAA,EAAO;AAAA,QAC9E,CAAA,MAAA,IAAW,SAAS,OAAA,EAAS;AAC3B,UAAA,UAAA,CAAW,OAAA,GAAU,EAAE,IAAA,EAAM,OAAA,EAAS,IAAA,EAAM,WAAW,KAAA,EAAO,aAAA,EAAe,KAAA,IAAS,EAAC,EAAE;AAAA,QAC3F;AAAA,MACF;AAGA,MAAA,IAAI,aAAA;AACJ,MAAA,IAAI,UAAA,EAAY;AACd,QAAA,aAAA,GAAgB,MAAM;AAAA,QAAC,CAAA;AAAA,MACzB,WAAW,KAAA,EAAO;AAChB,QAAA,aAAA,GAAgB,qBAAA,EAAsB;AAAA,MACxC,WAAW,KAAA,EAAO;AAChB,QAAA,aAAA,GAAgB,mBAAA,EAAoB;AAAA,MACtC,WAAW,QAAA,EAAU;AACnB,QAAA,aAAA,GAAgB,sBAAA,EAAuB;AAAA,MACzC,CAAA,MAAO;AACL,QAAA,aAAA,GAAgB,mBAAA,CAAoB;AAAA,UAClC,OAAA;AAAA,UACA,cAAA,EAAgB,IAAA;AAAA,UAChB,cAAA,EAAgB;AAAA,SACjB,CAAA;AAAA,MACH;AAEA,MAAA,IAAI;AACF,QAAA,MAAM,KAAA,GAAQ,CAAA,IAAA,EAAO,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA,EAAI,IAAA,CAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAC,CAAA,CAAA;AACzE,QAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,UAAU,CAAA;AACpD,QAAA,IAAI,kBAAA,GAAqB,SAAA;AAGzB,QAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,UAAA,MAAM,cAAA,GAAiB,MAAM,cAAA,CAAe,aAAA,CAAc;AAAA,YACxD,IAAA;AAAA,YACA,IAAA;AAAA,YACA,OAAA,EAAS;AAAA,WACV,CAAA;AACD,UAAA,kBAAA,GAAqB,cAAA,CAAe,EAAA;AAAA,QACtC,CAAA,MAAO;AACL,UAAA,MAAM,QAAA,GAAW,MAAM,cAAA,CAAe,WAAA,CAAY,kBAAkB,CAAA;AACpE,UAAA,IAAI,CAAC,QAAA,EAAU;AACb,YAAA,MAAM,cAAA,GAAiB,MAAM,cAAA,CAAe,aAAA,CAAc;AAAA,cACxD,IAAA;AAAA,cACA,IAAA;AAAA,cACA,OAAA,EAAS,WAAA;AAAA,cACT,SAAA,EAAW;AAAA,aACZ,CAAA;AACD,YAAA,kBAAA,GAAqB,cAAA,CAAe,EAAA;AAAA,UACtC;AAAA,QACF;AAGA,QAAA,MAAM,cAAA,CAAe,cAAA,CAAe,kBAAA,EAAoB,IAAA,EAAM,KAAK,CAAA;AAGnE,QAAA,MAAM,SAAA,uBAAgB,GAAA,EAAY;AAClC,QAAA,MAAM,aAAA,uBAAoB,GAAA,EAAoB;AAC9C,QAAA,MAAM,aAAA,GAAgB,yBAAA,CAA0B,UAAA,EAAY,kBAAkB,CAAA;AAC9E,QAAA,MAAM,+BAA+B,yCAAA,EAA0C;AAG/E,QAAA,MAAM,eAAe,kBAAA,CAAmB;AAAA,UACtC,UAAA;AAAA,UACA,WAAA,EAAa,IAAA;AAAA,UACb,SAAA,EAAW,kBAAA;AAAA,UACX,OAAA,EAAS,KAAA;AAAA;AAAA,UACT,OAAO,QAAA,EAAS;AAAA,UAChB,SAAA;AAAA,UACA,aAAA;AAAA,UACA,aAAA;AAAA,UACA,4BAAA,EAA8B,OAAO,EAAE,IAAA,EAAM,YAAY,MAAA,EAAO,KAK9D,6BAA6B,MAAA,CAAO;AAAA,YAClC,KAAA,EAAO,MAAA;AAAA,YACP,UAAU,EAAC;AAAA,YACX,MAAM,UAAA,IAAc;AAAA,WACrB;AAAA,SACJ,CAAA;AACD,QAAA,MAAM,YAAA,GAAe,MAAM,SAAA,EAA8B;AACzD,QAAA,MAAM,kBAAkB,OAAO,cAAA,KAAmB,QAAA,IAAY,cAAA,GAAiB,IAC3E,EAAE,GAAI,YAAA,EAAc,WAAA,IAAe,EAAC,EAAI,OAAA,EAAS,MAAM,SAAA,EAAW,cAAA,KAClE,YAAA,EAAc,WAAA;AAClB,QAAA,MAAM,SAAA,GAAY,cAAa,IAAK,IAAA;AACpC,QAAA,MAAM,MAAA,GAAS,CAAA,KAAA,EAAQ,IAAA,CAAK,GAAA,EAAK,CAAA,CAAA;AACjC,QAAA,MAAM,MAAA,GAAS,IAAI,sBAAA,CAAuB,MAAM,CAAA;AAGhD,QAAA,IAAI,IAAA,IAAQ,sBAAsB,SAAA,EAAW;AAC3C,UAAA,MAAM,QAAA,GAAW,cAAA,CAAe,kBAAA,CAAmB,kBAAkB,CAAA;AACrE,UAAA,IAAI;AACF,YAAA,MAAM,QAAA,GAAW,KAAK,KAAA,CAAM,MAAMA,SAAG,QAAA,CAAS,QAAA,EAAU,OAAO,CAAC,CAAA;AAChE,YAAA,IAAI,QAAA,CAAS,MAAA,KAAW,UAAA,IAAc,QAAA,CAAS,WAAW,YAAA,EAAc;AACtE,cAAA,GAAA,CAAI,EAAA,EAAI,OAAO,CAAA,qBAAA,EAAwB,QAAA,CAAS,EAAE,CAAA,EAAA,EAAK,QAAA,CAAS,MAAA,CAAO,MAAM,CAAA,qCAAA,CAAuC,CAAA;AACpH,cAAA,IAAIC,oBAAAA,GAAqC,QAAQ,OAAA,EAAQ;AACzD,cAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAAsB;AAC/C,gBAAA,MAAA,CAAO,MAAM,KAAK,CAAA;AAClB,gBAAA,aAAA,CAAc,KAAK,CAAA;AACnB,gBAAAA,oBAAAA,GAAsBA,oBAAAA,CACnB,IAAA,CAAK,YAAY;AAChB,kBAAA,MAAM,cAAA,CAAe,SAAS,kBAAA,EAAqB;AAAA,oBACjD,GAAG,KAAA;AAAA,oBACH,SAAA,EAAW,kBAAA;AAAA,oBACX,KAAA;AAAA,oBACA,QAAA,EAAU;AAAA,sBACR,GAAI,MAA6C,UAAU,CAAA;AAAA,sBAC3D,SAAA,EAAW,kBAAA;AAAA,sBACX,KAAA;AAAA,sBACA;AAAA;AACF,mBACwB,CAAA;AAAA,gBAC5B,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,kBAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,kBAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,0CAAA,EAA6C,OAAO,CAAA,CAAE,CAAA;AAAA,gBACrE,CAAC,CAAA;AAAA,cACL,CAAA;AACA,cAAA,MAAM,UAAA,GAA0B;AAAA,gBAC9B,UAAA;AAAA,gBACA,aAAA,EAAe,EAAA;AAAA,gBACf,WAAA,EAAa,GAAA;AAAA,gBACb,SAAA,EAAW,kBAAA;AAAA,gBACX,IAAA;AAAA,gBACA,SAAA;AAAA,gBACA,WAAA,EAAa,eAAA;AAAA,gBACb,OAAA,EAAS,iBAAA;AAAA,gBACT,aAAa,eAAA,EAAiB;AAAA,eAChC;AACA,cAAA,MAAM,WAAA,GAAc,IAAI,eAAA,EAAgB;AACxC,cAAA,MAAM,aAAa,MAAM,WAAA,CAAY,OAAA,CAAQ,QAAA,EAAU,YAAY,YAAY,CAAA;AAC/E,cAAA,MAAMA,oBAAAA;AACN,cAAA,MAAM,OAAO,QAAA,EAAS;AACtB,cAAA,MAAMC,cAAAA,GAAgB,OAAO,UAAA,EAAW;AACxC,cAAA,IAAIA,cAAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,gBAAA,MAAM,cAAA,CAAe,mBAAA,CAAoB,kBAAA,EAAoB,KAAA,EAAOA,cAAa,CAAA;AAAA,cACnF;AACA,cAAA,IAAI,WAAW,OAAA,EAAS;AACtB,gBAAA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,CAAA,gBAAA,EAAmB,UAAA,CAAW,IAAA,EAAM,EAAE,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,EAAM,QAAA,CAAS,MAAA,IAAU,CAAC,CAAA,WAAA,EAAc,UAAA,CAAW,IAAA,EAAM,QAAA,CAAS,MAAA,CAAO,CAAC,CAAA,EAAG,GAAA,KAAQ,CAAA,GAAI,GAAA,CAAI,OAAA,CAAQ,MAAA,EAAQ,CAAC,CAAA,IAAK,CAAC,CAAA,SAAA,CAAW,CAAA;AAAA,cACzM,CAAA,MAAO;AACL,gBAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,wBAAA,EAA2B,UAAA,CAAW,OAAO,CAAA,CAAE,CAAA;AAAA,cAChE;AACA,cAAA,MAAM,gBAAgB,UAAA,CAAW,OAAA;AACjC,cAAA,aAAA,EAAc;AACd,cAAA,OAAO;AAAA,gBACL,QAAA,EAAU,gBAAgB,CAAA,GAAI,CAAA;AAAA,gBAC9B,SAAA,EAAW,kBAAA;AAAA,gBACX,MAAA,EAAQ;AAAA,kBACN,OAAA,EAAS,aAAA;AAAA,kBACT,SAAS,UAAA,CAAW,OAAA;AAAA,kBACpB,cAAc,UAAA,CAAW,YAAA;AAAA,kBACzB,eAAe,UAAA,CAAW,aAAA;AAAA,kBAC1B,WAAW,UAAA,CAAW,SAAA;AAAA,kBACtB,YAAY,UAAA,CAAW,UAAA;AAAA,kBACvB,YAAY,UAAA,CAAW;AAAA;AACzB,eACF;AAAA,YACF;AAAA,UACF,CAAA,CAAA,MAAQ;AAAA,UAER;AAAA,QACF;AAGA,QAAA,IAAI,mBAAA,GAAqC,QAAQ,OAAA,EAAQ;AACzD,QAAA,IAAI,mBAAA,GAAsB,CAAA;AAG1B,QAAA,MAAM,sBAAA,GAAyB,CAAC,KAAA,KAAsB;AAEpD,UAAA,MAAA,CAAO,MAAM,KAAK,CAAA;AAElB,UAAA,aAAA,CAAc,KAAK,CAAA;AAEnB,UAAA,mBAAA,GAAsB,mBAAA,CACnB,KAAK,YAAY;AAChB,YAAA,MAAM,cAAA,CAAe,SAAS,kBAAA,EAAqB;AAAA,cACjD,GAAG,KAAA;AAAA,cACH,SAAA,EAAW,kBAAA;AAAA,cACX;AAAA,aACwB,CAAA;AAC1B,YAAA,mBAAA,IAAuB,CAAA;AAAA,UACzB,CAAC,CAAA,CACA,KAAA,CAAM,CAAC,KAAA,KAAU;AAChB,YAAA,MAAM,UAAU,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AACrE,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,qCAAA,EAAwC,OAAO,CAAA,CAAE,CAAA;AAAA,UAChE,CAAC,CAAA;AAAA,QACL,CAAA;AAGA,QAAA,MAAM,MAAA,GAAsB;AAAA,UAC1B,UAAA;AAAA,UACA,aAAA;AAAA,UACA,WAAA;AAAA,UACA,SAAA,EAAW,kBAAA;AAAA,UACX,IAAA;AAAA,UACA,SAAA;AAAA,UACA,aAAa,YAAA,EAAc,WAAA;AAAA,UAC3B,IAAA,EAAM,UAAA;AAAA,UACN,OAAA,EAAS,sBAAA;AAAA,UACT,KAAA;AAAA,UACA,aAAa,eAAA,EAAiB;AAAA,SAChC;AAGA,QAAA,IAAI,WAAA,KAAgB,KAAA,CAAA,IAAa,CAAC,KAAA,EAAO;AACvC,UAAA,GAAA,CAAI,IAAI,IAAA,GAAO,CAAA,+CAAA,EAA6C,WAAW,CAAA,aAAA,EAAgB,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,QACvG;AAGA,QAAA,MAAM,GAAA,GAAM,IAAI,QAAA,EAAS;AACzB,QAAA,GAAA,CAAI,QAAA,CAAS,kBAAA,CAAmB,YAAY,CAAC,CAAA;AAC7C,QAAA,MAAM,MAAA,GAAS,GAAA,CAAI,YAAA,CAAa,MAAM,CAAA;AACtC,QAAA,IAAI,MAAA,GAAS,MAAM,MAAA,CAAO,OAAA,CAAQ,IAAI,CAAA;AAGtC,QAAA,aAAA,EAAc;AAGd,QAAA,MAAM,mBAAA;AAIN,QAAA,IAAI,mBAAA,KAAwB,CAAA,IAAK,MAAA,CAAO,OAAA,EAAS,MAAK,EAAG;AACvD,UAAA,MAAM,GAAA,GAAA,iBAAM,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AACnC,UAAA,MAAM,OAAA,GAAU,SAAS,KAAK,CAAA,CAAA;AAC9B,UAAA,MAAM,YAAA,GAAe,EAAE,SAAA,EAAW,kBAAA,EAAoB,OAAO,UAAA,EAAW;AACxE,UAAA,MAAM,cAAA,CAAe,SAAS,kBAAA,EAAoB;AAAA,YAChD,IAAA,EAAM,aAAA;AAAA,YACN,SAAA,EAAW,GAAA;AAAA,YACX,SAAA,EAAW,kBAAA;AAAA,YACX,OAAA;AAAA,YACA,KAAA;AAAA,YACA,MAAM,EAAE,IAAA,EAAM,IAAA,EAAM,aAAA,EAAe,WAAW,CAAA,EAAE;AAAA,YAChD,QAAA,EAAU;AAAA,WACG,CAAA;AACf,UAAA,MAAM,cAAA,CAAe,SAAS,kBAAA,EAAoB;AAAA,YAChD,IAAA,EAAM,SAAA;AAAA,YACN,SAAA,EAAW,GAAA;AAAA,YACX,SAAA,EAAW,kBAAA;AAAA,YACX,OAAA;AAAA,YACA,KAAA;AAAA,YACA,IAAA,EAAM;AAAA,cACJ,SAAS,MAAA,CAAO,OAAA;AAAA,cAChB,YAAA,EAAc,KAAA;AAAA,cACd,UAAA,EAAY,CAAA;AAAA,cACZ,UAAA,EAAY,CAAA;AAAA,cACZ,UAAA,EAAY;AAAA,aACd;AAAA,YACA,QAAA,EAAU;AAAA,WACG,CAAA;AACf,UAAA,MAAM,cAAA,CAAe,SAAS,kBAAA,EAAoB;AAAA,YAChD,IAAA,EAAM,WAAA;AAAA,YACN,SAAA,EAAW,GAAA;AAAA,YACX,SAAA,EAAW,kBAAA;AAAA,YACX,OAAA;AAAA,YACA,KAAA;AAAA,YACA,IAAA,EAAM;AAAA,cACJ,SAAS,MAAA,CAAO,OAAA;AAAA,cAChB,SAAS,MAAA,CAAO,OAAA;AAAA,cAChB,YAAY,MAAA,CAAO,UAAA;AAAA,cACnB,YAAY,MAAA,CAAO,UAAA;AAAA,cACnB,UAAA,EAAY,CAAA;AAAA,cACZ,cAAc,MAAA,CAAO,YAAA;AAAA,cACrB,eAAe,MAAA,CAAO,aAAA;AAAA,cACtB,UAAA,EAAY,MAAA,CAAO,OAAA,GAAU,iBAAA,GAAoB;AAAA,aACnD;AAAA,YACA,QAAA,EAAU;AAAA,WACG,CAAA;AAAA,QACjB;AAEA,QAAA,MAAM,aAAA,GAAgB,OAAO,UAAA,EAAW;AACxC,QAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,UAAA,MAAM,cAAA,CAAe,mBAAA,CAAoB,kBAAA,EAAoB,KAAA,EAAO,aAAa,CAAA;AAAA,QACnF;AAGA,QAAA,IAAI,MAAA,CAAO,WAAA,IAAe,MAAA,CAAO,WAAA,CAAY,SAAS,CAAA,EAAG;AACvD,UAAA,MAAM,cAAA,CAAe,uBAAA,CAAwB,kBAAA,EAAoB,KAAA,EAAO,OAAO,WAAW,CAAA;AAAA,QAC5F;AAGA,QAAA,IAAI,OAAA,EAAS;AACX,UAAA,IAAI,SAAS,MAAA,EAAQ;AACnB,YAAA,GAAA,CAAI,EAAA,EAAI,OAAO,wDAAwD,CAAA;AAAA,UACzE,CAAA,MAAA,IAAW,CAAC,MAAA,CAAO,IAAA,EAAM;AACvB,YAAA,GAAA,CAAI,EAAA,EAAI,OAAO,mDAAmD,CAAA;AAAA,UACpE,CAAA,MAAO;AACL,YAAA,MAAM,UAAA,GAAA,iBAAa,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAC1C,YAAA,MAAM,YAAA,GAAe;AAAA,cACnB,GAAG,MAAA,CAAO,IAAA;AAAA,cACV,MAAA,EAAQ,UAAA;AAAA,cACR,UAAA;AAAA,cACA,eAAA,EAAiB,4BAAA;AAAA,cACjB,SAAA,EAAW;AAAA,aACb;AAEA,YAAA,MAAM,eAAA,GAAkB,cAAA,CAAe,kBAAA,CAAmB,kBAAkB,CAAA;AAC5E,YAAA,MAAMF,QAAA,CAAG,UAAU,eAAA,EAAiB,IAAA,CAAK,UAAU,YAAA,EAAc,IAAA,EAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAElF,YAAA,MAAM,mBAAA,GAAsB,IAAI,mBAAA,CAAoB,UAAU,CAAA;AAC9D,YAAA,MAAM,WAAA,GAAc,mBAAA,CAAoB,WAAA,CAAY,MAAA,CAAO,IAAI,CAAA;AAC/D,YAAA,MAAM,mBAAA,CAAoB,kBAAA;AAAA,cACxB,WAAA;AAAA,cACA,KAAK,UAAU,CAAA,oCAAA;AAAA,aACjB;AAEA,YAAA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,CAAA,eAAA,EAAkB,YAAA,CAAa,EAAE,CAAA,CAAE,CAAA;AAErD,YAAA,IAAI,gBAAA,EAAkB;AAEpB,cAAA,GAAA,CAAI,EAAA,EAAI,OAAO,4BAA4B,CAAA;AAC3C,cAAA,MAAM,aAAA,GAA6B;AAAA,gBACjC,GAAG,MAAA;AAAA,gBACH,IAAA,EAAM,EAAE,IAAA,EAAM,SAAA;AAAU,eAC1B;AACA,cAAA,MAAM,UAAA,GAAa,IAAI,QAAA,EAAS;AAChC,cAAA,UAAA,CAAW,QAAA,CAAS,kBAAA,CAAmB,YAAY,CAAC,CAAA;AACpD,cAAA,MAAM,aAAA,GAAgB,UAAA,CAAW,YAAA,CAAa,aAAa,CAAA;AAC3D,cAAA,MAAA,GAAS,MAAM,aAAA,CAAc,OAAA,CAAQ,IAAI,CAAA;AAAA,YAC3C,CAAA,MAAO;AACL,cAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,mCAAA,EAAsC,kBAAkB,CAAA,CAAE,CAAA;AAAA,YAC3E;AAGA,YAAA,IAAI,QAAQ,YAAA,EAAc;AACxB,cAAA,GAAA,CAAI,EAAA,EAAI,OAAO,yDAAyD,CAAA;AACxE,cAAA,MAAM,WAAA,GAAc,IAAI,eAAA,EAAgB;AACxC,cAAA,MAAM,aAAa,MAAM,WAAA,CAAY,OAAA,CAAQ,YAAA,EAAc,QAAQ,YAAY,CAAA;AAE/E,cAAA,IAAI,WAAW,OAAA,EAAS;AACtB,gBAAA,GAAA,CAAI,EAAA,EAAI,OAAA,GAAU,CAAA,gBAAA,EAAmB,UAAA,CAAW,IAAA,EAAM,EAAE,CAAA,EAAA,EAAK,UAAA,CAAW,IAAA,EAAM,QAAA,CAAS,MAAA,IAAU,CAAC,CAAA,UAAA,CAAY,CAAA;AAAA,cAChH,CAAA,MAAO;AACL,gBAAA,GAAA,CAAI,EAAA,EAAI,IAAA,GAAO,CAAA,wBAAA,EAA2B,UAAA,CAAW,OAAO,CAAA,CAAE,CAAA;AAAA,cAChE;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAGA,QAAA,MAAM,OAAO,QAAA,EAAS;AAKtB,QAAA,MAAM,eAAe,MAAA,CAAO,OAAA;AAC5B,QAAA,MAAM,gBAAA,GAAmB;AAAA,UACvB,QAAA,EAAU,eAAe,CAAA,GAAI,CAAA;AAAA,UAC7B,SAAA,EAAW,kBAAA;AAAA,UACX,SAAS,MAAA,CAAO,OAAA;AAAA,UAChB,IAAA,EAAM;AAAA,YACJ,SAAA,EAAW,kBAAA;AAAA,YACX,OAAA,EAAS,YAAA;AAAA,YACT,SAAS,MAAA,CAAO,OAAA;AAAA,YAChB,cAAc,MAAA,CAAO,YAAA;AAAA,YACrB,eAAe,MAAA,CAAO,aAAA;AAAA,YACtB,WAAW,MAAA,CAAO,SAAA;AAAA,YAClB,YAAY,MAAA,CAAO,UAAA;AAAA,YACnB,YAAY,MAAA,CAAO,UAAA;AAAA,YACnB,OAAA,EAAS,IAAA,KAAS,MAAA,IAAU,CAAC,CAAC,MAAA,CAAO;AAAA;AACvC,SACF;AAEA,QAAA,IAAI,UAAA,EAAY;AACd,UAAA,GAAA,CAAI,EAAA,EAAI,OAAO,gBAAgB,CAAA;AAAA,QACjC;AAEA,QAAA,OAAO,gBAAA;AAAA,MACT,SAAS,KAAA,EAAO;AACd,QAAA,aAAA,EAAc;AAEd,QAAA,IAAI,eAAA,EAAiB,OAAO,OAAA,EAAS;AACnC,UAAA,MAAM,MAAA,GAAS,eAAA,CAAgB,MAAA,CAAO,MAAA,YAAkB,KAAA,GACpD,gBAAgB,MAAA,CAAO,MAAA,CAAO,OAAA,GAC9B,CAAA,gCAAA,EAAmC,WAAW,CAAA,CAAA,CAAA;AAClD,UAAA,OAAA,CAAQ,KAAA,CAAM;AAAA,QAAA,EAAQ,MAAM;AAAA,CAAI,CAAA;AAChC,UAAA,OAAO,EAAE,UAAU,GAAA,EAAI;AAAA,QACzB;AACA,QAAA,MAAM,eAAe,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU,OAAO,KAAK,CAAA;AAC1E,QAAA,OAAA,CAAQ,KAAA,CAAM;AAAA,+BAAA,EAA+B,YAAY;AAAA,CAAI,CAAA;AAC7D,QAAA,OAAO,EAAE,UAAU,CAAA,EAAE;AAAA,MACvB;AAAA,IACF;AAAA;AAEJ,CAAC","file":"run.js","sourcesContent":["/**\n * Agent Event Renderer for CLI\n *\n * Renders agent events as beautiful CLI output with visual hierarchy.\n * Shows orchestrator ā subtasks ā agents ā tools as nested blocks.\n */\n\nimport type { AgentEvent, AgentEventCallback } from '@kb-labs/agent-contracts';\n\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n// ANSI Colors & Symbols\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n\nconst CSI = '\\x1b[';\nconst RESET = '\\x1b[0m';\n\nconst color = {\n // Status colors\n success: (t: string) => `${CSI}32m${t}${RESET}`,\n error: (t: string) => `${CSI}31m${t}${RESET}`,\n warning: (t: string) => `${CSI}33m${t}${RESET}`,\n info: (t: string) => `${CSI}36m${t}${RESET}`,\n\n // UI colors\n dim: (t: string) => `${CSI}90m${t}${RESET}`,\n bold: (t: string) => `${CSI}1m${t}${RESET}`,\n accent: (t: string) => `${CSI}38;5;99m${t}${RESET}`, // Purple - orchestrator\n primary: (t: string) => `${CSI}38;5;39m${t}${RESET}`, // Blue - agent\n highlight: (t: string) => `${CSI}38;5;51m${t}${RESET}`, // Cyan - tools\n secondary: (t: string) => `${CSI}38;5;208m${t}${RESET}`, // Orange - subtask\n};\n\n// Box-drawing characters for visual hierarchy\nconst box = {\n topLeft: 'ā',\n topRight: 'ā',\n bottomLeft: 'ā',\n bottomRight: 'ā',\n horizontal: 'ā',\n vertical: 'ā',\n leftT: 'ā',\n rightT: 'ā¤',\n cross: 'ā¼',\n};\n\nconst symbols = {\n success: color.success('ā'),\n error: color.error('ā'),\n warning: color.warning('ā '),\n spinner: ['ā', 'ā', 'ā', 'ā'],\n thinking: 'ā',\n executing: 'ā¶',\n tool: 'ā',\n file: 'š',\n search: 'š',\n command: '$',\n memory: 'š¾',\n subtask: 'ā',\n agent: 'ā',\n};\n\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n// Render State - tracks current nesting level\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n\ninterface RenderState {\n currentSubtask: { id: string; index: number; total: number } | null;\n agentActive: boolean;\n indentLevel: number;\n}\n\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n// Helper Functions\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n\nfunction formatDuration(ms: number): string {\n if (ms < 1000) {return `${ms}ms`;}\n if (ms < 60000) {return `${(ms / 1000).toFixed(1)}s`;}\n return `${Math.floor(ms / 60000)}m ${Math.floor((ms % 60000) / 1000)}s`;\n}\n\nfunction formatPath(path: string, maxLen = 40): string {\n if (path.length <= maxLen) {return path;}\n const parts = path.split('/');\n if (parts.length <= 2) {return '...' + path.slice(-maxLen + 3);}\n return `.../${parts.slice(-2).join('/')}`;\n}\n\nfunction formatBudget(event: AgentEvent): string | null {\n const data = event.data as {\n budgetUsedTokens?: unknown;\n budgetRemainingTokens?: unknown;\n budgetTotalTokens?: unknown;\n };\n const used = typeof data.budgetUsedTokens === 'number' ? data.budgetUsedTokens : null;\n const remaining = typeof data.budgetRemainingTokens === 'number' ? data.budgetRemainingTokens : null;\n const total = typeof data.budgetTotalTokens === 'number' ? data.budgetTotalTokens : null;\n if (used === null && remaining === null && total === null) {\n return null;\n }\n const fmt = (value: number | null): string => (value === null ? '?' : value.toLocaleString('en-US'));\n return `Budget ${fmt(used)} used / ${fmt(total)} total (${fmt(remaining)} left)`;\n}\n\nfunction indent(level: number): string {\n return ' '.repeat(level);\n}\n\nfunction renderBoxTop(title: string, colorFn: (s: string) => string, width = 60): string {\n const titleLen = title.length + 2; // space around title\n const leftPad = 2;\n const rightPad = width - leftPad - titleLen - 2;\n return colorFn(\n `${box.topLeft}${box.horizontal.repeat(leftPad)} ${title} ${box.horizontal.repeat(Math.max(0, rightPad))}${box.topRight}`\n );\n}\n\nfunction renderBoxBottom(colorFn: (s: string) => string, width = 60): string {\n return colorFn(`${box.bottomLeft}${box.horizontal.repeat(width - 2)}${box.bottomRight}`);\n}\n\nfunction renderBoxLine(content: string, colorFn: (s: string) => string): string {\n return `${colorFn(box.vertical)} ${content}`;\n}\n\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n// Event Renderer Factory\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n\nexport function createEventRenderer(options: {\n verbose?: boolean;\n showToolOutput?: boolean;\n showLLMContent?: boolean;\n showDebug?: boolean;\n}): AgentEventCallback {\n const { verbose = true, showToolOutput = true, showLLMContent = false, showDebug = false } = options;\n\n const state: RenderState = {\n currentSubtask: null,\n agentActive: false,\n indentLevel: 0,\n };\n\n return (event: AgentEvent) => {\n const _prefix = indent(state.indentLevel);\n\n switch (event.type) {\n // āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n // SUBTASK LEVEL\n // āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n case 'subtask:start': {\n state.currentSubtask = {\n id: event.data.subtaskId,\n index: event.data.index,\n total: event.data.total,\n };\n state.indentLevel = 1;\n\n const subtaskNum = `${event.data.index + 1}/${event.data.total}`;\n console.log(color.accent(box.vertical));\n console.log(\n color.accent(`${box.leftT}${box.horizontal}`) +\n renderBoxTop(`SUBTASK ${subtaskNum}`, color.secondary, 50)\n );\n console.log(\n color.accent(box.vertical) + ' ' +\n renderBoxLine(\n `${symbols.subtask} ${event.data.description.slice(0, 45)}${event.data.description.length > 45 ? '...' : ''}`,\n color.secondary\n )\n );\n console.log(color.accent(box.vertical) + ' ' + color.secondary(box.vertical));\n break;\n }\n\n case 'subtask:end': {\n const status = event.data.success\n ? color.success(`${symbols.success} Done`)\n : color.error(`${symbols.error} Failed`);\n\n console.log(color.accent(box.vertical) + ' ' + color.secondary(box.vertical));\n console.log(\n color.accent(box.vertical) + ' ' +\n renderBoxLine(status, color.secondary)\n );\n console.log(\n color.accent(box.vertical) + ' ' +\n renderBoxBottom(color.secondary, 50)\n );\n\n state.currentSubtask = null;\n state.indentLevel = 0;\n break;\n }\n\n // āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n // AGENT LEVEL (nested under subtask or standalone)\n // āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n case 'agent:start': {\n state.agentActive = true;\n\n // Determine prefix based on context\n const linePrefix = state.currentSubtask\n ? color.accent(box.vertical) + ' ' + color.secondary(box.vertical) + ' '\n : '';\n\n console.log(linePrefix);\n console.log(linePrefix + renderBoxTop(`AGENT [${event.data.tier}]`, color.primary, 45));\n console.log(linePrefix + renderBoxLine(\n `${symbols.agent} ${event.data.task.slice(0, 40)}${event.data.task.length > 40 ? '...' : ''}`,\n color.primary\n ));\n console.log(linePrefix + renderBoxLine(\n color.dim(`Tools: ${event.data.toolCount} | Max iterations: ${event.data.maxIterations}`),\n color.primary\n ));\n\n state.indentLevel = state.currentSubtask ? 3 : 1;\n break;\n }\n\n case 'agent:end': {\n const linePrefix = state.currentSubtask\n ? color.accent(box.vertical) + ' ' + color.secondary(box.vertical) + ' '\n : '';\n\n const status = event.data.success\n ? color.success(`${symbols.success} Success`)\n : color.error(`${symbols.error} Failed`);\n\n console.log(linePrefix + color.primary(box.vertical));\n console.log(linePrefix + renderBoxLine(\n `${status} ${color.dim(`(${formatDuration(event.data.durationMs)}, ${event.data.tokensUsed} tokens)`)}`,\n color.primary\n ));\n\n // Show the result summary - this is what the agent produced!\n if (event.data.summary) {\n console.log(linePrefix + color.primary(box.vertical));\n console.log(linePrefix + renderBoxLine(\n color.bold('š Result:'),\n color.primary\n ));\n // Print full summary ā no truncation for final agent answer\n const summaryLines = event.data.summary.split('\\n');\n for (const line of summaryLines) {\n if (line.trim()) {\n // Word wrap long lines at ~80 chars\n const words = line.split(' ');\n let currentLine = '';\n for (const word of words) {\n if (currentLine.length + word.length > 75) {\n if (currentLine) {\n console.log(linePrefix + renderBoxLine(` ${currentLine}`, color.primary));\n }\n currentLine = word;\n } else {\n currentLine = currentLine ? `${currentLine} ${word}` : word;\n }\n }\n if (currentLine) {\n console.log(linePrefix + renderBoxLine(` ${currentLine}`, color.primary));\n }\n }\n }\n }\n\n if (event.data.filesModified.length > 0 || event.data.filesCreated.length > 0) {\n const files = [...event.data.filesCreated, ...event.data.filesModified];\n console.log(linePrefix + renderBoxLine(\n color.dim(`Files: ${files.slice(0, 3).map(f => formatPath(f, 20)).join(', ')}${files.length > 3 ? ` +${files.length - 3}` : ''}`),\n color.primary\n ));\n }\n\n console.log(linePrefix + renderBoxBottom(color.primary, 45));\n\n state.agentActive = false;\n state.indentLevel = state.currentSubtask ? 1 : 0;\n break;\n }\n\n case 'agent:error': {\n const linePrefix = getLinePrefix(state);\n console.log(linePrefix + renderBoxLine(\n `${symbols.error} ${color.error('Error:')} ${event.data.error.slice(0, 50)}`,\n color.primary\n ));\n break;\n }\n\n // āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n // ITERATION & LLM (inside agent box)\n // āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n case 'iteration:start': {\n const linePrefix = getLinePrefix(state);\n if (verbose) {\n console.log(linePrefix + color.primary(box.vertical));\n console.log(linePrefix + renderBoxLine(\n color.dim(`āāā Iteration ${event.data.iteration}/${event.data.maxIterations} āāā`),\n color.primary\n ));\n }\n break;\n }\n\n case 'llm:start': {\n const linePrefix = getLinePrefix(state);\n if (verbose) {\n const iterLabel = event.data.iteration !== undefined ? color.dim(` #${event.data.iteration}`) : '';\n const msgLabel = showDebug ? color.dim(` [${event.data.messageCount} msgs, ${event.data.toolCount ?? 0} tools, ${event.data.systemPromptChars ?? 0} sys chars]`) : '';\n process.stdout.write(linePrefix + renderBoxLine(\n `${color.accent(symbols.thinking)} ${color.dim('Thinking...')}${iterLabel}${msgLabel}`,\n color.primary\n ));\n }\n break;\n }\n\n case 'llm:end': {\n if (verbose) {\n // Clear line and show result\n process.stdout.write(`\\r`);\n const linePrefix = getLinePrefix(state);\n const stopLabel = event.data.stopReason ? `, stop=${event.data.stopReason}` : '';\n console.log(linePrefix + renderBoxLine(\n `${color.accent(symbols.thinking)} Thought ${color.dim(`(${formatDuration(event.data.durationMs)}, ${event.data.tokensUsed} tok${stopLabel})`)}`,\n color.primary\n ));\n\n // Always show LLM reasoning in verbose mode (truncated)\n if (event.data.content) {\n const maxLen = showDebug ? 2000 : showLLMContent ? 500 : 150;\n const content = event.data.content.slice(0, maxLen).replace(/\\n/g, ' ').trim();\n if (content) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` š \"${content}${event.data.content.length > maxLen ? '...' : ''}\"`),\n color.primary\n ));\n }\n }\n }\n break;\n }\n\n // āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n // TOOL EXECUTION (inside agent, compact format)\n // āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n case 'tool:start': {\n const linePrefix = getLinePrefix(state);\n const toolName = event.data.toolName;\n const meta = event.data.metadata;\n\n let details = '';\n if (showDebug) {\n // In debug mode: show raw input JSON (truncated at 200 chars)\n const inputObj = event.data.input as Record<string, unknown> | undefined;\n if (inputObj && Object.keys(inputObj).length > 0) {\n const raw = JSON.stringify(inputObj);\n const maxLen = 200;\n details = ` ${color.dim(raw.slice(0, maxLen) + (raw.length > maxLen ? '...' : ''))}`;\n }\n } else if (meta?.filePath) {\n details = ` ${color.dim(formatPath(meta.filePath as string, 30))}`;\n } else if (meta?.query) {\n details = ` ${color.dim(`\"${(meta.query as string).slice(0, 25)}${(meta.query as string).length > 25 ? '...' : ''}\"`)}`\n } else if (meta?.command) {\n details = ` ${color.dim(`$ ${(meta.command as string).slice(0, 25)}`)}`\n }\n\n process.stdout.write(linePrefix + renderBoxLine(\n `${color.highlight(symbols.tool)} ${color.highlight(toolName)}${details}`,\n color.primary\n ));\n break;\n }\n\n case 'tool:end': {\n const status = event.data.success\n ? ` ${symbols.success}`\n : ` ${symbols.error}`;\n\n process.stdout.write(`${status} ${color.dim(formatDuration(event.data.durationMs))}\\n`);\n\n // Show tool output details\n if (showToolOutput) {\n const linePrefix = getLinePrefix(state);\n const meta = event.data.metadata;\n const output = event.data.output;\n\n // Show output preview for tools\n if (output && verbose) {\n const maxOutputLen = showDebug ? 1000 : 200;\n if (showDebug) {\n // In debug mode: show output with preserved newlines\n const truncated = output.slice(0, maxOutputLen);\n const lines = truncated.split('\\n');\n for (const line of lines) {\n if (line.trim()) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` š ${line}`),\n color.primary\n ));\n }\n }\n if (output.length > maxOutputLen) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` š ... (${output.length - maxOutputLen} more chars)`),\n color.primary\n ));\n }\n } else {\n // Normal mode: compact single line\n const cleanOutput = output\n .slice(0, maxOutputLen)\n .replace(/\\n/g, ' ')\n .replace(/\\s+/g, ' ')\n .trim();\n if (cleanOutput && cleanOutput.length > 10) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` š ${cleanOutput}${output.length > maxOutputLen ? '...' : ''}`),\n color.primary\n ));\n }\n }\n }\n\n // Show metadata summary if available\n if (meta?.summary && !output) {\n console.log(linePrefix + renderBoxLine(\n color.dim(` āā ${(meta.summary as string).slice(0, 80)}`),\n color.primary\n ));\n }\n }\n break;\n }\n\n case 'tool:error': {\n process.stdout.write(` ${symbols.error}\\n`);\n const linePrefix = getLinePrefix(state);\n console.log(linePrefix + renderBoxLine(\n color.error(` āā ${event.data.error.slice(0, 50)}`),\n color.primary\n ));\n break;\n }\n\n // āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n // MEMORY & PROGRESS (compact notifications)\n // āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n case 'memory:write': {\n if (verbose) {\n const linePrefix = getLinePrefix(state);\n console.log(linePrefix + renderBoxLine(\n color.dim(`${symbols.memory} Saved ${event.data.entryType} to ${event.data.target}`),\n color.primary\n ));\n }\n break;\n }\n\n case 'progress:update': {\n const budgetLine = formatBudget(event);\n const phase = event.data.phase || 'progress';\n const progress = Math.max(0, Math.min(100, Math.round(event.data.progress || 0)));\n const message = event.data.message || '';\n\n if (verbose) {\n const linePrefix = getLinePrefix(state);\n const main = `[${phase}] ${progress}%${message ? ` - ${message}` : ''}`;\n console.log(linePrefix + renderBoxLine(color.info(main), color.primary));\n if (budgetLine) {\n console.log(linePrefix + renderBoxLine(color.dim(` ${budgetLine}`), color.primary));\n }\n } else if (message && (phase === 'plan' || phase === 'spec') && (progress === 100 || progress === 5)) {\n const budgetSuffix = budgetLine ? ` | ${budgetLine}` : '';\n console.log(`${color.info(`[${phase}]`)} ${message}${budgetSuffix}`);\n }\n break;\n }\n\n case 'status:change': {\n const budgetLine = formatBudget(event);\n if (verbose && event.data.message) {\n const linePrefix = getLinePrefix(state);\n console.log(linePrefix + renderBoxLine(\n color.info(`Status: ${event.data.status}${event.data.message ? ` - ${event.data.message}` : ''}`),\n color.primary\n ));\n if (budgetLine) {\n console.log(linePrefix + renderBoxLine(color.dim(` ${budgetLine}`), color.primary));\n }\n // When plan is ready and waiting for approval, show the approve/execute commands\n if (event.data.status === 'waiting' && event.sessionId) {\n const sid = event.sessionId;\n console.log(linePrefix + renderBoxLine(color.dim(` To approve: kb agent run --session-id=${sid} --approve`), color.primary));\n console.log(linePrefix + renderBoxLine(color.dim(` To execute: kb agent run --session-id=${sid}`), color.primary));\n }\n }\n // Only show significant status in non-verbose mode\n if (!verbose && (event.data.status === 'done' || event.data.status === 'error')) {\n const budgetSuffix = budgetLine ? ` (${budgetLine})` : '';\n console.log(\n event.data.status === 'done'\n ? `${symbols.success} ${event.data.message}${budgetSuffix}`\n : `${symbols.error} ${event.data.message}${budgetSuffix}`\n );\n }\n break;\n }\n\n case 'middleware:decision': {\n if (verbose) {\n const linePrefix = getLinePrefix(state);\n const decisionIcons: Record<string, string> = {\n soft_warning: 'ā ',\n hard_stop: 'š',\n trimmed: 'ā',\n loop_detected: 'š',\n stuck: 'āø',\n summarized: 'š',\n };\n const icon = decisionIcons[event.data.decision] ?? 'Ā·';\n console.log(linePrefix + renderBoxLine(\n color.dim(` ${icon} [${event.data.middleware}] ${event.data.decision}`),\n color.primary\n ));\n }\n break;\n }\n\n case 'llm:debug': {\n if (!showDebug) { break; }\n const linePrefix = getLinePrefix(state);\n const iterLabel = event.data.iteration !== undefined ? ` (iter #${event.data.iteration})` : '';\n console.log(linePrefix + renderBoxLine(\n color.dim(` āāā System Prompt${iterLabel} āāā`),\n color.primary\n ));\n // Full system prompt, no truncation\n for (const line of event.data.systemPrompt.split('\\n')) {\n console.log(linePrefix + renderBoxLine(color.dim(` ${line}`), color.primary));\n }\n console.log(linePrefix + renderBoxLine(color.dim(' āāā Messages āāā'), color.primary));\n for (const m of event.data.messages) {\n const roleLabel = `[${m.role}]`;\n const content = m.content;\n // Show each message fully, line by line\n const lines = content.split('\\n');\n const firstLine = `${roleLabel} ${lines[0] ?? ''}`;\n console.log(linePrefix + renderBoxLine(color.dim(` ${firstLine}`), color.primary));\n for (const line of lines.slice(1)) {\n console.log(linePrefix + renderBoxLine(color.dim(` ${line}`), color.primary));\n }\n }\n console.log(linePrefix + renderBoxLine(color.dim(' āāā End Prompt āāā'), color.primary));\n break;\n }\n\n default:\n // Unknown event - ignore\n break;\n }\n };\n\n function getLinePrefix(state: RenderState): string {\n if (state.currentSubtask && state.agentActive) {\n return color.accent(box.vertical) + ' ' + color.secondary(box.vertical) + ' ';\n }\n if (state.currentSubtask) {\n return color.accent(box.vertical) + ' ' + color.secondary(box.vertical) + ' ';\n }\n if (state.agentActive) {\n return '';\n }\n return '';\n }\n}\n\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n// Preset Renderers\n// āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā\n\n/**\n * Minimal renderer - only shows high-level events\n */\nexport function createMinimalRenderer(): AgentEventCallback {\n return createEventRenderer({\n verbose: false,\n showToolOutput: false,\n showLLMContent: false,\n });\n}\n\n/**\n * Detailed renderer - shows everything including LLM content\n */\nexport function createDetailedRenderer(): AgentEventCallback {\n return createEventRenderer({\n verbose: true,\n showToolOutput: true,\n showLLMContent: true,\n });\n}\n\n/**\n * Debug renderer - maximum verbosity: full prompts, full tool I/O, no truncation\n */\nexport function createDebugRenderer(): AgentEventCallback {\n return createEventRenderer({\n verbose: true,\n showToolOutput: true,\n showLLMContent: true,\n showDebug: true,\n });\n}\n","/**\n * agent:run command - unified agent interface\n *\n * Uses event-driven UI rendering instead of simple loaders.\n */\n\nimport { defineCommand, useAnalytics, useCache, useConfig, type PluginContextV3 } from '@kb-labs/sdk';\nimport {\n SessionManager,\n PlanDocumentService,\n SpecModeHandler,\n bootstrapAgentSDK,\n createSessionMemoryBridge,\n createCoreToolPack,\n} from '@kb-labs/agent-core';\nimport { AgentSDK } from '@kb-labs/agent-sdk';\nimport { createDefaultResponseRequirementsSelector } from '@kb-labs/agent-runtime';\nimport { IncrementalTraceWriter } from '@kb-labs/agent-tracing';\nimport { createToolRegistry } from '@kb-labs/agent-tools';\nimport type { AgentConfig, ModeConfig, AgentMode, AgentEvent, AgentsPluginConfig, KernelState } from '@kb-labs/agent-contracts';\nimport type { TaskPlan } from '@kb-labs/agent-contracts';\nimport { promises as fs } from 'node:fs';\nimport { createEventRenderer, createMinimalRenderer, createDetailedRenderer, createDebugRenderer } from '../ui/index.js';\n\n// Register SDKAgentRunner as the RunnerFactory (idempotent ā runs once per process)\nbootstrapAgentSDK();\n\ntype RunInput = {\n task: string;\n workingDir?: string;\n maxIterations?: number;\n temperature?: number;\n verbose?: boolean;\n quiet?: boolean;\n detailed?: boolean;\n sessionId?: string;\n tier?: 'small' | 'medium' | 'large';\n escalate?: boolean;\n mode?: AgentMode;\n complexity?: 'simple' | 'medium' | 'complex';\n files?: string[];\n trace?: string;\n approve?: boolean;\n execute?: boolean;\n spec?: boolean;\n 'dry-run'?: boolean;\n debug?: boolean;\n /** Abort execution after this many seconds (0 or undefined = no timeout). */\n timeout?: number;\n /** Override token budget (e.g. 300000 for heavy tasks). Overrides config value. */\n budget?: number;\n /** Output structured JSON instead of human-readable output. */\n json?: boolean;\n argv?: string[];\n};\n\ntype RunResult = {\n exitCode: number;\n sessionId?: string;\n result?: {\n success: boolean;\n summary: string;\n filesCreated: string[];\n filesModified: string[];\n filesRead: string[];\n iterations: number;\n tokensUsed: number;\n };\n};\n\nfunction parseBooleanFlag(value: unknown, defaultValue: boolean): boolean {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (['true', '1', 'yes', 'y', 'on'].includes(normalized)) {return true;}\n if (['false', '0', 'no', 'n', 'off'].includes(normalized)) {return false;}\n }\n if (typeof value === 'number') {\n return value !== 0;\n }\n return defaultValue;\n}\n\nexport default defineCommand({\n id: 'agent:run',\n description: 'Execute a task with autonomous agent (orchestrator + child agents)',\n\n handler: {\n async execute(ctx: PluginContextV3, input: RunInput): Promise<RunResult> {\n // V3: Flags come in input.flags object (not auto-merged)\n const flags = (input as any).flags ?? input;\n\n const {\n task,\n workingDir = ctx.cwd || process.cwd(),\n maxIterations = 200,\n temperature = 0.1,\n verbose: verboseRaw = true,\n quiet: quietRaw = false,\n detailed: detailedRaw = false,\n sessionId,\n tier = 'medium',\n mode = 'execute',\n complexity,\n files,\n trace,\n approve: approveRaw = false,\n execute: executeRaw = false,\n spec: specRaw = false,\n 'dry-run': dryRunRaw = false,\n debug: debugRaw = false,\n timeout: timeoutSeconds,\n budget: budgetOverride,\n json: jsonOutput = false,\n } = flags;\n\n const verbose = parseBooleanFlag(verboseRaw, true);\n const quiet = parseBooleanFlag(quietRaw, false);\n const detailed = parseBooleanFlag(detailedRaw, false);\n const approve = parseBooleanFlag(approveRaw, false);\n const executeAfterPlan = parseBooleanFlag(executeRaw, false);\n const spec = parseBooleanFlag(specRaw, false);\n const dryRun = parseBooleanFlag(dryRunRaw, false);\n const debug = parseBooleanFlag(debugRaw, false);\n\n // Build an AbortController when --timeout is specified.\n // The signal is passed into AgentConfig so the runner can honour it.\n const timeoutSecs = typeof timeoutSeconds === 'number' && timeoutSeconds > 0\n ? timeoutSeconds\n : undefined;\n\n const abortController = timeoutSecs !== undefined ? new AbortController() : undefined;\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n\n if (abortController && timeoutSecs !== undefined) {\n timeoutHandle = setTimeout(() => {\n abortController.abort(\n new Error(`Agent execution timed out after ${timeoutSecs}s (--timeout=${timeoutSecs})`)\n );\n }, timeoutSecs * 1000);\n // Unref so the timer never prevents the Node.js process from exiting naturally\n // when the agent finishes before the deadline.\n timeoutHandle.unref?.();\n }\n\n // Helper: always clear the timer once execution finishes (success or error).\n const clearTimeout_ = () => {\n if (timeoutHandle !== undefined) {\n clearTimeout(timeoutHandle);\n timeoutHandle = undefined;\n }\n };\n\n // Allow --approve without --task when --session-id is provided (approve existing plan)\n if (!task) {\n if (approve && sessionId) {\n const sessionManager = new SessionManager(workingDir as string || ctx.cwd || process.cwd());\n const planPath = sessionManager.getSessionPlanPath(sessionId as string);\n try {\n const raw = await fs.readFile(planPath, 'utf-8');\n const plan: TaskPlan = JSON.parse(raw);\n if (plan.status !== 'draft') {\n ctx.ui?.warn?.(`Plan is not in draft state (current: ${plan.status}). Nothing to approve.`);\n clearTimeout_();\n return { exitCode: 1 };\n }\n const approvedAt = new Date().toISOString();\n const approvedPlan = { ...plan, status: 'approved' as const, approvedAt, approvalComment: 'Approved via CLI --approve', updatedAt: approvedAt };\n await fs.writeFile(planPath, JSON.stringify(approvedPlan, null, 2), 'utf-8');\n const planDocumentService = new PlanDocumentService(workingDir as string || ctx.cwd || process.cwd());\n const planDocPath = planDocumentService.getPlanPath(plan);\n await planDocumentService.appendExecutionLog(planDocPath, `- ${approvedAt}: Plan approved via CLI (--approve).`).catch(() => {});\n ctx.ui?.success?.(`Plan approved: ${approvedPlan.id} (session: ${sessionId})`);\n ctx.ui?.info?.(`Ready to execute: kb agent run --session-id=${sessionId}`);\n clearTimeout_();\n return { exitCode: 0, sessionId: sessionId as string };\n } catch {\n ctx.ui?.error?.(`No plan found for session: ${sessionId}`);\n clearTimeout_();\n return { exitCode: 1 };\n }\n }\n ctx.ui?.error?.('Error: --task is required');\n clearTimeout_();\n return { exitCode: 1 };\n }\n\n // Build mode config\n let modeConfig: ModeConfig | undefined;\n if (mode !== 'execute') {\n modeConfig = { mode } as ModeConfig;\n\n // Add mode-specific context\n if (mode === 'plan') {\n modeConfig.context = { mode: 'plan', task, complexity };\n } else if (mode === 'edit') {\n modeConfig.context = { mode: 'edit', task, targetFiles: files || [], dryRun };\n } else if (mode === 'debug') {\n modeConfig.context = { mode: 'debug', task, traceFile: trace, relevantFiles: files || [] };\n }\n }\n\n // Select event renderer based on verbosity flags\n let eventRenderer;\n if (jsonOutput) {\n eventRenderer = () => {}; // Suppress all human output for JSON mode\n } else if (quiet) {\n eventRenderer = createMinimalRenderer();\n } else if (debug) {\n eventRenderer = createDebugRenderer();\n } else if (detailed) {\n eventRenderer = createDetailedRenderer();\n } else {\n eventRenderer = createEventRenderer({\n verbose,\n showToolOutput: true,\n showLLMContent: false,\n });\n }\n\n try {\n const runId = `run-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;\n const sessionManager = new SessionManager(workingDir);\n let effectiveSessionId = sessionId as string | undefined;\n\n // Ensure session exists for consistent history/memory behavior in CLI path.\n if (!effectiveSessionId) {\n const createdSession = await sessionManager.createSession({\n mode,\n task,\n agentId: 'cli-agent',\n });\n effectiveSessionId = createdSession.id;\n } else {\n const existing = await sessionManager.loadSession(effectiveSessionId);\n if (!existing) {\n const createdSession = await sessionManager.createSession({\n mode,\n task,\n agentId: 'cli-agent',\n sessionId: effectiveSessionId,\n });\n effectiveSessionId = createdSession.id;\n }\n }\n\n // Persist user turn first so timeline ordering is deterministic.\n await sessionManager.createUserTurn(effectiveSessionId, task, runId);\n\n // Create shared file tracking (for edit protection)\n const filesRead = new Set<string>();\n const filesReadHash = new Map<string, string>();\n const sessionMemory = createSessionMemoryBridge(workingDir, effectiveSessionId);\n const responseRequirementsSelector = createDefaultResponseRequirementsSelector();\n\n // Create tool registry\n const toolRegistry = createToolRegistry({\n workingDir,\n currentTask: task,\n sessionId: effectiveSessionId,\n verbose: false, // Disable tool registry verbose - we have event renderer\n cache: useCache(),\n filesRead,\n filesReadHash,\n sessionMemory,\n responseRequirementsResolver: async ({ task: activeTask, kernel }: {\n task?: string;\n answer: string;\n kernel: KernelState | null;\n }) =>\n responseRequirementsSelector.select({\n state: kernel,\n messages: [],\n task: activeTask ?? task,\n }),\n });\n const agentsConfig = await useConfig<AgentsPluginConfig>();\n const effectiveBudget = typeof budgetOverride === 'number' && budgetOverride > 0\n ? { ...(agentsConfig?.tokenBudget ?? {}), enabled: true, maxTokens: budgetOverride }\n : agentsConfig?.tokenBudget;\n const analytics = useAnalytics() ?? null;\n const taskId = `task-${Date.now()}`;\n const tracer = new IncrementalTraceWriter(taskId);\n\n // Spec-only fast path: skip plan mode, generate spec from existing approved plan\n if (spec && effectiveSessionId && sessionId) {\n const planPath = sessionManager.getSessionPlanPath(effectiveSessionId);\n try {\n const planData = JSON.parse(await fs.readFile(planPath, 'utf-8')) as TaskPlan;\n if (planData.status === 'approved' || planData.status === 'spec_ready') {\n ctx.ui?.info?.(`Found approved plan: ${planData.id} (${planData.phases.length} phases). Generating spec directly...`);\n let pendingSessionWrite: Promise<void> = Promise.resolve();\n const specEventCallback = (event: AgentEvent) => {\n tracer.trace(event);\n eventRenderer(event);\n pendingSessionWrite = pendingSessionWrite\n .then(async () => {\n await sessionManager.addEvent(effectiveSessionId!, {\n ...event,\n sessionId: effectiveSessionId,\n runId,\n metadata: {\n ...(event as unknown as Record<string, unknown>)['metadata'] as Record<string, unknown> | undefined,\n sessionId: effectiveSessionId,\n runId,\n workingDir,\n },\n } as unknown as AgentEvent);\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`[agent:run] Failed to persist spec event: ${message}`);\n });\n };\n const specConfig: AgentConfig = {\n workingDir,\n maxIterations: 40,\n temperature: 0.1,\n sessionId: effectiveSessionId,\n tier,\n analytics,\n tokenBudget: effectiveBudget,\n onEvent: specEventCallback,\n abortSignal: abortController?.signal,\n };\n const specHandler = new SpecModeHandler();\n const specResult = await specHandler.execute(planData, specConfig, toolRegistry);\n await pendingSessionWrite;\n await tracer.finalize();\n const detailedTrace = tracer.getEntries() as Array<Record<string, unknown>>;\n if (detailedTrace.length > 0) {\n await sessionManager.storeTraceArtifacts(effectiveSessionId, runId, detailedTrace);\n }\n if (specResult.success) {\n ctx.ui?.success?.(`Spec generated: ${specResult.spec?.id} (${specResult.spec?.sections.length || 0} sections, ${specResult.spec?.sections.reduce((s, sec) => s + sec.changes.length, 0) || 0} changes)`);\n } else {\n ctx.ui?.warn?.(`Spec generation failed: ${specResult.summary}`);\n }\n const specSucceeded = specResult.success;\n clearTimeout_();\n return {\n exitCode: specSucceeded ? 0 : 1,\n sessionId: effectiveSessionId,\n result: {\n success: specSucceeded,\n summary: specResult.summary,\n filesCreated: specResult.filesCreated,\n filesModified: specResult.filesModified,\n filesRead: specResult.filesRead,\n iterations: specResult.iterations,\n tokensUsed: specResult.tokensUsed,\n },\n };\n }\n } catch {\n // No plan.json or unreadable ā fall through to normal flow\n }\n }\n\n // Track pending session writes so we can flush before exit\n let pendingSessionWrite: Promise<void> = Promise.resolve();\n let persistedEventCount = 0;\n\n // Create composite event callback that writes to tracer, renders UI, AND persists to session\n const compositeEventCallback = (event: AgentEvent) => {\n // Write to tracer\n tracer.trace(event);\n // Render UI\n eventRenderer(event);\n // Persist to session for conversation history\n pendingSessionWrite = pendingSessionWrite\n .then(async () => {\n await sessionManager.addEvent(effectiveSessionId!, {\n ...event,\n sessionId: effectiveSessionId,\n runId,\n } as unknown as AgentEvent);\n persistedEventCount += 1;\n })\n .catch((error) => {\n const message = error instanceof Error ? error.message : String(error);\n console.warn(`[agent:run] Failed to persist event: ${message}`);\n });\n };\n\n // Create agent config with event callback\n const config: AgentConfig = {\n workingDir,\n maxIterations,\n temperature,\n sessionId: effectiveSessionId,\n tier,\n analytics,\n tokenBudget: agentsConfig?.tokenBudget,\n mode: modeConfig,\n onEvent: compositeEventCallback,\n debug,\n abortSignal: abortController?.signal,\n };\n\n // Announce the active timeout so the user knows about the deadline.\n if (timeoutSecs !== undefined && !quiet) {\n ctx.ui?.info?.(`ā± Timeout active: agent will abort after ${timeoutSecs}s (--timeout=${timeoutSecs})`);\n }\n\n // Create and execute agent via SDK\n const sdk = new AgentSDK();\n sdk.register(createCoreToolPack(toolRegistry));\n const runner = sdk.createRunner(config);\n let result = await runner.execute(task);\n\n // Execution finished ā cancel the timer immediately so it doesn't fire.\n clearTimeout_();\n\n // Flush pending session writes (ensures agent:end is persisted before exit)\n await pendingSessionWrite;\n\n // Some modes can complete without emitting event stream.\n // Persist synthetic assistant turn events so history stays complete.\n if (persistedEventCount === 0 && result.summary?.trim()) {\n const now = new Date().toISOString();\n const agentId = `agent-${runId}`;\n const baseMetadata = { sessionId: effectiveSessionId, runId, workingDir };\n await sessionManager.addEvent(effectiveSessionId, {\n type: 'agent:start',\n timestamp: now,\n sessionId: effectiveSessionId,\n agentId,\n runId,\n data: { task, tier, maxIterations, toolCount: 0 },\n metadata: baseMetadata,\n } as AgentEvent);\n await sessionManager.addEvent(effectiveSessionId, {\n type: 'llm:end',\n timestamp: now,\n sessionId: effectiveSessionId,\n agentId,\n runId,\n data: {\n content: result.summary,\n hasToolCalls: false,\n tokensUsed: 0,\n durationMs: 0,\n stopReason: 'no_tool_calls',\n },\n metadata: baseMetadata,\n } as AgentEvent);\n await sessionManager.addEvent(effectiveSessionId, {\n type: 'agent:end',\n timestamp: now,\n sessionId: effectiveSessionId,\n agentId,\n runId,\n data: {\n success: result.success,\n summary: result.summary,\n iterations: result.iterations,\n tokensUsed: result.tokensUsed,\n durationMs: 0,\n filesCreated: result.filesCreated,\n filesModified: result.filesModified,\n stopReason: result.success ? 'report_complete' : 'unknown',\n },\n metadata: baseMetadata,\n } as AgentEvent);\n }\n\n const detailedTrace = tracer.getEntries() as Array<Record<string, unknown>>;\n if (detailedTrace.length > 0) {\n await sessionManager.storeTraceArtifacts(effectiveSessionId, runId, detailedTrace);\n }\n\n // Attach file change summaries to turn for UI rollback/approve panel\n if (result.fileChanges && result.fileChanges.length > 0) {\n await sessionManager.attachFileChangesToTurn(effectiveSessionId, runId, result.fileChanges);\n }\n\n // Auto-approve generated plan in plan mode (--mode=plan --approve)\n if (approve) {\n if (mode !== 'plan') {\n ctx.ui?.warn?.('--approve is currently supported only with --mode=plan');\n } else if (!result.plan) {\n ctx.ui?.warn?.('No plan produced by plan mode, nothing to approve');\n } else {\n const approvedAt = new Date().toISOString();\n const approvedPlan = {\n ...result.plan,\n status: 'approved' as const,\n approvedAt,\n approvalComment: 'Approved via CLI --approve',\n updatedAt: approvedAt,\n };\n\n const sessionPlanPath = sessionManager.getSessionPlanPath(effectiveSessionId);\n await fs.writeFile(sessionPlanPath, JSON.stringify(approvedPlan, null, 2), 'utf-8');\n\n const planDocumentService = new PlanDocumentService(workingDir);\n const planDocPath = planDocumentService.getPlanPath(result.plan);\n await planDocumentService.appendExecutionLog(\n planDocPath,\n `- ${approvedAt}: Plan approved via CLI (--approve).`\n );\n\n ctx.ui?.success?.(`Plan approved: ${approvedPlan.id}`);\n\n if (executeAfterPlan) {\n // --execute: immediately run the approved plan in execute mode\n ctx.ui?.info?.('Executing approved plan...');\n const executeConfig: AgentConfig = {\n ...config,\n mode: { mode: 'execute' },\n };\n const executeSdk = new AgentSDK();\n executeSdk.register(createCoreToolPack(toolRegistry));\n const executeRunner = executeSdk.createRunner(executeConfig);\n result = await executeRunner.execute(task);\n } else {\n ctx.ui?.info?.(`Execute: kb agent run --session-id=${effectiveSessionId}`);\n }\n\n // Optional: generate spec after auto-approve\n if (spec && approvedPlan) {\n ctx.ui?.info?.('Generating detailed specification from approved plan...');\n const specHandler = new SpecModeHandler();\n const specResult = await specHandler.execute(approvedPlan, config, toolRegistry);\n\n if (specResult.success) {\n ctx.ui?.success?.(`Spec generated: ${specResult.spec?.id} (${specResult.spec?.sections.length || 0} sections)`);\n } else {\n ctx.ui?.warn?.(`Spec generation failed: ${specResult.summary}`);\n }\n }\n }\n }\n\n // Finalize tracer: generate index with memory stats, cleanup old traces\n await tracer.finalize();\n\n // Event renderer already showed the result via agent:end event\n // Just return the structured result\n\n const runSucceeded = result.success;\n const structuredResult = {\n exitCode: runSucceeded ? 0 : 1,\n sessionId: effectiveSessionId,\n summary: result.summary,\n data: {\n sessionId: effectiveSessionId,\n success: runSucceeded,\n summary: result.summary,\n filesCreated: result.filesCreated,\n filesModified: result.filesModified,\n filesRead: result.filesRead,\n iterations: result.iterations,\n tokensUsed: result.tokensUsed,\n hasPlan: mode === 'plan' && !!result.plan,\n },\n };\n\n if (jsonOutput) {\n ctx.ui?.json?.(structuredResult);\n }\n\n return structuredResult;\n } catch (error) {\n clearTimeout_();\n // Surface a clear message when the timeout fired.\n if (abortController?.signal.aborted) {\n const reason = abortController.signal.reason instanceof Error\n ? abortController.signal.reason.message\n : `Agent execution timed out after ${timeoutSecs}s`;\n console.error(`\\nā± ${reason}\\n`);\n return { exitCode: 124 }; // 124 mirrors the POSIX timeout(1) exit code\n }\n const errorMessage = error instanceof Error ? error.message : String(error);\n console.error(`\\nā Agent execution failed: ${errorMessage}\\n`);\n return { exitCode: 1 };\n }\n },\n },\n});\n"]}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* agent:trace:context - View what LLM sees at each iteration
|
|
5
|
+
*
|
|
6
|
+
* Shows the full context timeline: what messages are in the sliding window,
|
|
7
|
+
* what was truncated, what was dropped, and what the LLM responded.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* pnpm kb agent trace context --task-id=<id>
|
|
11
|
+
* pnpm kb agent trace context --task-id=<id> --iteration=3
|
|
12
|
+
* pnpm kb agent trace context --task-id=<id> --json
|
|
13
|
+
*/
|
|
14
|
+
type TraceContextInput = {
|
|
15
|
+
taskId?: string;
|
|
16
|
+
'task-id'?: string;
|
|
17
|
+
iteration?: number;
|
|
18
|
+
json?: boolean;
|
|
19
|
+
};
|
|
20
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, TraceContextInput, unknown>;
|
|
21
|
+
|
|
22
|
+
export { _default as default };
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { defineCommand } from '@kb-labs/sdk';
|
|
2
|
+
import { loadTrace, formatTraceLoadError } from '@kb-labs/agent-tracing';
|
|
3
|
+
|
|
4
|
+
// src/cli/commands/trace-context.ts
|
|
5
|
+
var trace_context_default = defineCommand({
|
|
6
|
+
id: "trace:context",
|
|
7
|
+
description: "View what the LLM sees at each iteration \u2014 context window, truncations, and responses",
|
|
8
|
+
handler: {
|
|
9
|
+
async execute(ctx, input) {
|
|
10
|
+
const flags = input.flags ?? input;
|
|
11
|
+
const taskId = flags["task-id"] ?? flags.taskId;
|
|
12
|
+
const filterIteration = typeof flags.iteration === "string" ? parseInt(flags.iteration, 10) : flags.iteration;
|
|
13
|
+
try {
|
|
14
|
+
const loaded = await loadTrace(taskId);
|
|
15
|
+
if (!loaded.ok) {
|
|
16
|
+
ctx.ui.write(JSON.stringify(error("INVALID_TASK_ID", formatTraceLoadError(loaded.error)), null, 2) + "\n");
|
|
17
|
+
return { exitCode: 1 };
|
|
18
|
+
}
|
|
19
|
+
const events = loaded.events;
|
|
20
|
+
const iterations = [];
|
|
21
|
+
let currentSnapshot = null;
|
|
22
|
+
for (const e of events) {
|
|
23
|
+
const eAny = e;
|
|
24
|
+
if (e.type === "context:snapshot") {
|
|
25
|
+
currentSnapshot = eAny.data || e;
|
|
26
|
+
}
|
|
27
|
+
if (eAny.type === "llm_response" && currentSnapshot) {
|
|
28
|
+
const llmEnd = events.find(
|
|
29
|
+
(ev) => ev.type === "llm:end" && Math.abs(new Date(ev.timestamp).getTime() - new Date(eAny.timestamp).getTime()) < 5e3
|
|
30
|
+
);
|
|
31
|
+
const responseData = eAny.data || e;
|
|
32
|
+
const endData = llmEnd?.data || llmEnd || {};
|
|
33
|
+
iterations.push({
|
|
34
|
+
iteration: currentSnapshot.iteration,
|
|
35
|
+
context: currentSnapshot,
|
|
36
|
+
response: responseData,
|
|
37
|
+
tokensUsed: endData.tokensUsed || 0,
|
|
38
|
+
durationMs: endData.durationMs || 0
|
|
39
|
+
});
|
|
40
|
+
currentSnapshot = null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
const filtered = filterIteration ? iterations.filter((it) => it.iteration === filterIteration) : iterations;
|
|
44
|
+
if (filtered.length === 0) {
|
|
45
|
+
ctx.ui.write("No context:snapshot events found. Make sure agent was run with latest build.\n");
|
|
46
|
+
return { exitCode: 1 };
|
|
47
|
+
}
|
|
48
|
+
if (flags.json) {
|
|
49
|
+
ctx.ui.write(JSON.stringify({ success: true, iterations: filtered }, null, 2) + "\n");
|
|
50
|
+
} else {
|
|
51
|
+
printTimeline(ctx, filtered);
|
|
52
|
+
}
|
|
53
|
+
return { exitCode: 0 };
|
|
54
|
+
} catch (err) {
|
|
55
|
+
ctx.ui.write(JSON.stringify(error("TRACE_NOT_FOUND", `Trace not found: ${taskId}`), null, 2) + "\n");
|
|
56
|
+
return { exitCode: 1 };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
function printTimeline(ctx, iterations) {
|
|
62
|
+
ctx.ui.write("\n\u{1F4CB} Context Timeline\n");
|
|
63
|
+
ctx.ui.write("\u2550".repeat(60) + "\n");
|
|
64
|
+
for (const it of iterations) {
|
|
65
|
+
const sw = it.context.slidingWindow;
|
|
66
|
+
ctx.ui.write(`
|
|
67
|
+
\u2500\u2500\u2500 Iteration ${it.iteration} \u2500\u2500\u2500
|
|
68
|
+
`);
|
|
69
|
+
ctx.ui.write(` \u{1F4CA} Context: ${it.context.messageCount} messages, ~${it.context.estimatedTokens} tokens (${it.context.totalChars} chars)
|
|
70
|
+
`);
|
|
71
|
+
ctx.ui.write(` \u{1F527} Tools available: ${it.context.toolCount}
|
|
72
|
+
`);
|
|
73
|
+
if (sw && sw.droppedMessages > 0) {
|
|
74
|
+
ctx.ui.write(` \u26A0\uFE0F Sliding window: ${sw.droppedMessages} messages DROPPED (${sw.fullHistorySize} total, window=${sw.windowedSize})
|
|
75
|
+
`);
|
|
76
|
+
}
|
|
77
|
+
ctx.ui.write(`
|
|
78
|
+
Messages:
|
|
79
|
+
`);
|
|
80
|
+
for (const msg of it.context.messages) {
|
|
81
|
+
const role = msg.role.padEnd(10);
|
|
82
|
+
const size = `${msg.chars}`.padStart(5) + " chars";
|
|
83
|
+
let flags = "";
|
|
84
|
+
if (msg.truncated) {
|
|
85
|
+
flags += " [TRUNCATED]";
|
|
86
|
+
}
|
|
87
|
+
if (msg.toolCalls) {
|
|
88
|
+
flags += ` \u2192 calls: ${msg.toolCalls.join(", ")}`;
|
|
89
|
+
}
|
|
90
|
+
if (msg.toolCallId) {
|
|
91
|
+
flags += ` (result for ${msg.toolCallId.slice(0, 8)}...)`;
|
|
92
|
+
}
|
|
93
|
+
ctx.ui.write(` [${msg.index}] ${role} ${size}${flags}
|
|
94
|
+
`);
|
|
95
|
+
if (msg.preview && msg.role === "tool" && msg.chars < 200) {
|
|
96
|
+
ctx.ui.write(` "${msg.preview.slice(0, 80)}"
|
|
97
|
+
`);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (it.response) {
|
|
101
|
+
ctx.ui.write(`
|
|
102
|
+
\u{1F916} Response: ${it.tokensUsed} tokens, ${it.durationMs}ms
|
|
103
|
+
`);
|
|
104
|
+
if (it.response.content && it.response.content.length > 0 && it.response.content !== "[Executing tools...]") {
|
|
105
|
+
const preview = it.response.content.slice(0, 200).replace(/\n/g, " ");
|
|
106
|
+
ctx.ui.write(` Text: "${preview}"
|
|
107
|
+
`);
|
|
108
|
+
}
|
|
109
|
+
if (it.response.toolCalls && it.response.toolCalls.length > 0) {
|
|
110
|
+
for (const tc of it.response.toolCalls) {
|
|
111
|
+
ctx.ui.write(` \u2192 ${tc.name}(${tc.args.slice(0, 100)})
|
|
112
|
+
`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
ctx.ui.write("\n");
|
|
118
|
+
}
|
|
119
|
+
function error(code, message) {
|
|
120
|
+
return {
|
|
121
|
+
success: false,
|
|
122
|
+
command: "trace:context",
|
|
123
|
+
taskId: "",
|
|
124
|
+
error: { code, message },
|
|
125
|
+
summary: { message, severity: "error", actionable: true }
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
export { trace_context_default as default };
|
|
130
|
+
//# sourceMappingURL=trace-context.js.map
|
|
131
|
+
//# sourceMappingURL=trace-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/cli/commands/trace-context.ts"],"names":[],"mappings":"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","file":"trace-context.js","sourcesContent":["/**\n * agent:trace:context - View what LLM sees at each iteration\n *\n * Shows the full context timeline: what messages are in the sliding window,\n * what was truncated, what was dropped, and what the LLM responded.\n *\n * Usage:\n * pnpm kb agent trace context --task-id=<id>\n * pnpm kb agent trace context --task-id=<id> --iteration=3\n * pnpm kb agent trace context --task-id=<id> --json\n */\n\nimport { defineCommand, type PluginContextV3 } from '@kb-labs/sdk';\nimport type { TraceCommandResponse, TraceErrorCode } from '@kb-labs/agent-contracts';\nimport { loadTrace, formatTraceLoadError } from '@kb-labs/agent-tracing';\n\ntype TraceContextInput = {\n taskId?: string;\n 'task-id'?: string;\n iteration?: number;\n json?: boolean;\n};\n\ntype ContextMessage = {\n index: number;\n role: string;\n chars: number;\n truncated?: boolean;\n toolCalls?: string[];\n toolCallId?: string;\n preview?: string;\n};\n\ntype ContextSnapshot = {\n iteration: number;\n tier: string;\n messageCount: number;\n totalChars: number;\n estimatedTokens: number;\n toolCount: number;\n slidingWindow?: {\n fullHistorySize: number;\n windowedSize: number;\n droppedMessages: number;\n };\n messages: ContextMessage[];\n};\n\ntype LLMResponseInfo = {\n content: string;\n hasToolCalls: boolean;\n toolCallsCount: number;\n toolCalls?: Array<{ name: string; args: string }>;\n};\n\ntype IterationContext = {\n iteration: number;\n context: ContextSnapshot;\n response: LLMResponseInfo | null;\n tokensUsed: number;\n durationMs: number;\n};\n\nexport default defineCommand({\n id: 'trace:context',\n description: 'View what the LLM sees at each iteration ā context window, truncations, and responses',\n\n handler: {\n async execute(ctx: PluginContextV3, input: TraceContextInput): Promise<{ exitCode: number }> {\n const flags = (input as any).flags ?? input;\n const taskId = (flags['task-id'] ?? flags.taskId) as string | undefined;\n const filterIteration = typeof flags.iteration === 'string'\n ? parseInt(flags.iteration, 10)\n : (flags.iteration as number | undefined);\n\n try {\n const loaded = await loadTrace(taskId);\n if (!loaded.ok) {\n ctx.ui.write(JSON.stringify(error('INVALID_TASK_ID', formatTraceLoadError(loaded.error)), null, 2) + '\\n');\n return { exitCode: 1 };\n }\n const events = loaded.events;\n\n // Collect context snapshots and LLM responses\n const iterations: IterationContext[] = [];\n let currentSnapshot: ContextSnapshot | null = null;\n\n for (const e of events) {\n const eAny = e as any;\n if (e.type === 'context:snapshot') {\n // Fields are at top level (IncrementalTraceWriter format)\n currentSnapshot = (eAny.data || e) as ContextSnapshot;\n }\n\n if (eAny.type === 'llm_response' && currentSnapshot) {\n const llmEnd = events.find((ev: any) =>\n ev.type === 'llm:end' &&\n Math.abs(new Date(ev.timestamp).getTime() - new Date(eAny.timestamp).getTime()) < 5000\n );\n\n const responseData = (eAny.data || e) as LLMResponseInfo;\n const endData = (llmEnd as any)?.data || llmEnd || {};\n\n iterations.push({\n iteration: currentSnapshot.iteration,\n context: currentSnapshot,\n response: responseData,\n tokensUsed: endData.tokensUsed || 0,\n durationMs: endData.durationMs || 0,\n });\n currentSnapshot = null;\n }\n }\n\n // Filter by iteration if specified\n const filtered = filterIteration\n ? iterations.filter(it => it.iteration === filterIteration)\n : iterations;\n\n if (filtered.length === 0) {\n ctx.ui.write('No context:snapshot events found. Make sure agent was run with latest build.\\n');\n return { exitCode: 1 };\n }\n\n if (flags.json) {\n ctx.ui.write(JSON.stringify({ success: true, iterations: filtered }, null, 2) + '\\n');\n } else {\n printTimeline(ctx, filtered);\n }\n\n return { exitCode: 0 };\n } catch (err) {\n ctx.ui.write(JSON.stringify(error('TRACE_NOT_FOUND', `Trace not found: ${taskId}`), null, 2) + '\\n');\n return { exitCode: 1 };\n }\n },\n },\n});\n\nfunction printTimeline(ctx: PluginContextV3, iterations: IterationContext[]): void {\n ctx.ui.write('\\nš Context Timeline\\n');\n ctx.ui.write('ā'.repeat(60) + '\\n');\n\n for (const it of iterations) {\n const sw = it.context.slidingWindow;\n ctx.ui.write(`\\nāāā Iteration ${it.iteration} āāā\\n`);\n ctx.ui.write(` š Context: ${it.context.messageCount} messages, ~${it.context.estimatedTokens} tokens (${it.context.totalChars} chars)\\n`);\n ctx.ui.write(` š§ Tools available: ${it.context.toolCount}\\n`);\n\n if (sw && sw.droppedMessages > 0) {\n ctx.ui.write(` ā ļø Sliding window: ${sw.droppedMessages} messages DROPPED (${sw.fullHistorySize} total, window=${sw.windowedSize})\\n`);\n }\n\n ctx.ui.write(`\\n Messages:\\n`);\n for (const msg of it.context.messages) {\n const role = msg.role.padEnd(10);\n const size = `${msg.chars}`.padStart(5) + ' chars';\n let flags = '';\n if (msg.truncated) {flags += ' [TRUNCATED]';}\n if (msg.toolCalls) {flags += ` ā calls: ${msg.toolCalls.join(', ')}`;}\n if (msg.toolCallId) {flags += ` (result for ${msg.toolCallId.slice(0, 8)}...)`;}\n\n ctx.ui.write(` [${msg.index}] ${role} ${size}${flags}\\n`);\n\n // Show preview for tool results and short messages\n if (msg.preview && msg.role === 'tool' && msg.chars < 200) {\n ctx.ui.write(` \"${msg.preview.slice(0, 80)}\"\\n`);\n }\n }\n\n // LLM response\n if (it.response) {\n ctx.ui.write(`\\n š¤ Response: ${it.tokensUsed} tokens, ${it.durationMs}ms\\n`);\n\n if (it.response.content && it.response.content.length > 0 && it.response.content !== '[Executing tools...]') {\n const preview = it.response.content.slice(0, 200).replace(/\\n/g, ' ');\n ctx.ui.write(` Text: \"${preview}\"\\n`);\n }\n\n if (it.response.toolCalls && it.response.toolCalls.length > 0) {\n for (const tc of it.response.toolCalls) {\n ctx.ui.write(` ā ${tc.name}(${tc.args.slice(0, 100)})\\n`);\n }\n }\n }\n }\n\n ctx.ui.write('\\n');\n}\n\nfunction error(code: TraceErrorCode, message: string): TraceCommandResponse {\n return {\n success: false,\n command: 'trace:context',\n taskId: '',\n error: { code, message },\n summary: { message, severity: 'error', actionable: true },\n };\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as _kb_labs_shared_command_kit from '@kb-labs/shared-command-kit';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* agent:trace:diagnose - Quick diagnostic analysis of agent execution
|
|
5
|
+
*
|
|
6
|
+
* One command to answer "what went wrong?" ā shows errors, context drops,
|
|
7
|
+
* tool failures, loop detection, LLM reasoning, and quality indicators.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* pnpm kb agent trace diagnose --task-id=<id>
|
|
11
|
+
* pnpm kb agent trace diagnose --task-id=<id> --json
|
|
12
|
+
*/
|
|
13
|
+
type TraceDiagnoseInput = {
|
|
14
|
+
taskId?: string;
|
|
15
|
+
'task-id'?: string;
|
|
16
|
+
json?: boolean;
|
|
17
|
+
};
|
|
18
|
+
declare const _default: _kb_labs_shared_command_kit.CommandHandlerV3<unknown, TraceDiagnoseInput, unknown>;
|
|
19
|
+
|
|
20
|
+
export { _default as default };
|