@llm4ts/flow 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +41 -0
- package/dist/AzureDevOpsTool.d.ts +60 -0
- package/dist/AzureDevOpsTool.d.ts.map +1 -0
- package/dist/AzureDevOpsTool.js +163 -0
- package/dist/AzureDevOpsTool.js.map +1 -0
- package/dist/Bench.d.ts +133 -0
- package/dist/Bench.d.ts.map +1 -0
- package/dist/Bench.js +272 -0
- package/dist/Bench.js.map +1 -0
- package/dist/BenchReport.d.ts +9 -0
- package/dist/BenchReport.d.ts.map +1 -0
- package/dist/BenchReport.js +360 -0
- package/dist/BenchReport.js.map +1 -0
- package/dist/CapabilityGuard.d.ts +6 -0
- package/dist/CapabilityGuard.d.ts.map +1 -0
- package/dist/CapabilityGuard.js +25 -0
- package/dist/CapabilityGuard.js.map +1 -0
- package/dist/Chat.d.ts +15 -0
- package/dist/Chat.d.ts.map +1 -0
- package/dist/Chat.js +36 -0
- package/dist/Chat.js.map +1 -0
- package/dist/Classified.d.ts +14 -0
- package/dist/Classified.d.ts.map +1 -0
- package/dist/Classified.js +48 -0
- package/dist/Classified.js.map +1 -0
- package/dist/CostLedger.d.ts +55 -0
- package/dist/CostLedger.d.ts.map +1 -0
- package/dist/CostLedger.js +126 -0
- package/dist/CostLedger.js.map +1 -0
- package/dist/CostTracker.d.ts +13 -0
- package/dist/CostTracker.d.ts.map +1 -0
- package/dist/CostTracker.js +116 -0
- package/dist/CostTracker.js.map +1 -0
- package/dist/Equiv.d.ts +163 -0
- package/dist/Equiv.d.ts.map +1 -0
- package/dist/Equiv.js +256 -0
- package/dist/Equiv.js.map +1 -0
- package/dist/EquivReport.d.ts +16 -0
- package/dist/EquivReport.d.ts.map +1 -0
- package/dist/EquivReport.js +77 -0
- package/dist/EquivReport.js.map +1 -0
- package/dist/Flow.d.ts +25 -0
- package/dist/Flow.d.ts.map +1 -0
- package/dist/Flow.js +39 -0
- package/dist/Flow.js.map +1 -0
- package/dist/FlowContext.d.ts +23 -0
- package/dist/FlowContext.d.ts.map +1 -0
- package/dist/FlowContext.js +4 -0
- package/dist/FlowContext.js.map +1 -0
- package/dist/FlowError.d.ts +80 -0
- package/dist/FlowError.d.ts.map +1 -0
- package/dist/FlowError.js +92 -0
- package/dist/FlowError.js.map +1 -0
- package/dist/FlowEvents.d.ts +101 -0
- package/dist/FlowEvents.d.ts.map +1 -0
- package/dist/FlowEvents.js +103 -0
- package/dist/FlowEvents.js.map +1 -0
- package/dist/FlowRecorder.d.ts +26 -0
- package/dist/FlowRecorder.d.ts.map +1 -0
- package/dist/FlowRecorder.js +74 -0
- package/dist/FlowRecorder.js.map +1 -0
- package/dist/GitHubTool.d.ts +53 -0
- package/dist/GitHubTool.d.ts.map +1 -0
- package/dist/GitHubTool.js +191 -0
- package/dist/GitHubTool.js.map +1 -0
- package/dist/GitTool.d.ts +46 -0
- package/dist/GitTool.d.ts.map +1 -0
- package/dist/GitTool.js +97 -0
- package/dist/GitTool.js.map +1 -0
- package/dist/Interaction.d.ts +21 -0
- package/dist/Interaction.d.ts.map +1 -0
- package/dist/Interaction.js +9 -0
- package/dist/Interaction.js.map +1 -0
- package/dist/McpServer.d.ts +18 -0
- package/dist/McpServer.d.ts.map +1 -0
- package/dist/McpServer.js +122 -0
- package/dist/McpServer.js.map +1 -0
- package/dist/Mermaid.d.ts +7 -0
- package/dist/Mermaid.d.ts.map +1 -0
- package/dist/Mermaid.js +98 -0
- package/dist/Mermaid.js.map +1 -0
- package/dist/Pack.d.ts +40 -0
- package/dist/Pack.d.ts.map +1 -0
- package/dist/Pack.js +141 -0
- package/dist/Pack.js.map +1 -0
- package/dist/Package.d.ts +2 -0
- package/dist/Package.d.ts.map +1 -0
- package/dist/Package.js +2 -0
- package/dist/Package.js.map +1 -0
- package/dist/Persistence.d.ts +32 -0
- package/dist/Persistence.d.ts.map +1 -0
- package/dist/Persistence.js +85 -0
- package/dist/Persistence.js.map +1 -0
- package/dist/Plan.d.ts +26 -0
- package/dist/Plan.d.ts.map +1 -0
- package/dist/Plan.js +101 -0
- package/dist/Plan.js.map +1 -0
- package/dist/PlanExecution.d.ts +7 -0
- package/dist/PlanExecution.d.ts.map +1 -0
- package/dist/PlanExecution.js +19 -0
- package/dist/PlanExecution.js.map +1 -0
- package/dist/Planner.d.ts +32 -0
- package/dist/Planner.d.ts.map +1 -0
- package/dist/Planner.js +97 -0
- package/dist/Planner.js.map +1 -0
- package/dist/PrSummary.d.ts +15 -0
- package/dist/PrSummary.d.ts.map +1 -0
- package/dist/PrSummary.js +29 -0
- package/dist/PrSummary.js.map +1 -0
- package/dist/PriceList.d.ts +11 -0
- package/dist/PriceList.d.ts.map +1 -0
- package/dist/PriceList.js +79 -0
- package/dist/PriceList.js.map +1 -0
- package/dist/Provenance.d.ts +27 -0
- package/dist/Provenance.d.ts.map +1 -0
- package/dist/Provenance.js +38 -0
- package/dist/Provenance.js.map +1 -0
- package/dist/Replay.d.ts +29 -0
- package/dist/Replay.d.ts.map +1 -0
- package/dist/Replay.js +181 -0
- package/dist/Replay.js.map +1 -0
- package/dist/Review.d.ts +71 -0
- package/dist/Review.d.ts.map +1 -0
- package/dist/Review.js +204 -0
- package/dist/Review.js.map +1 -0
- package/dist/ReviewCache.d.ts +6 -0
- package/dist/ReviewCache.d.ts.map +1 -0
- package/dist/ReviewCache.js +28 -0
- package/dist/ReviewCache.js.map +1 -0
- package/dist/Reviewer.d.ts +12 -0
- package/dist/Reviewer.d.ts.map +1 -0
- package/dist/Reviewer.js +30 -0
- package/dist/Reviewer.js.map +1 -0
- package/dist/SpecChecks.d.ts +17 -0
- package/dist/SpecChecks.d.ts.map +1 -0
- package/dist/SpecChecks.js +107 -0
- package/dist/SpecChecks.js.map +1 -0
- package/dist/Survey.d.ts +32 -0
- package/dist/Survey.d.ts.map +1 -0
- package/dist/Survey.js +119 -0
- package/dist/Survey.js.map +1 -0
- package/dist/TransientRetry.d.ts +16 -0
- package/dist/TransientRetry.d.ts.map +1 -0
- package/dist/TransientRetry.js +102 -0
- package/dist/TransientRetry.js.map +1 -0
- package/dist/Workspace.d.ts +39 -0
- package/dist/Workspace.d.ts.map +1 -0
- package/dist/Workspace.js +192 -0
- package/dist/Workspace.js.map +1 -0
- package/dist/WorkspaceLayout.d.ts +3 -0
- package/dist/WorkspaceLayout.d.ts.map +1 -0
- package/dist/WorkspaceLayout.js +19 -0
- package/dist/WorkspaceLayout.js.map +1 -0
- package/dist/WorkspaceTools.d.ts +4 -0
- package/dist/WorkspaceTools.d.ts.map +1 -0
- package/dist/WorkspaceTools.js +130 -0
- package/dist/WorkspaceTools.js.map +1 -0
- package/package.json +91 -0
- package/src/AzureDevOpsTool.ts +291 -0
- package/src/Bench.ts +340 -0
- package/src/BenchReport.ts +447 -0
- package/src/CapabilityGuard.ts +43 -0
- package/src/Chat.ts +60 -0
- package/src/Classified.ts +67 -0
- package/src/CostLedger.ts +171 -0
- package/src/CostTracker.ts +170 -0
- package/src/Equiv.ts +378 -0
- package/src/EquivReport.ts +92 -0
- package/src/Flow.ts +72 -0
- package/src/FlowContext.ts +23 -0
- package/src/FlowError.ts +112 -0
- package/src/FlowEvents.ts +147 -0
- package/src/FlowRecorder.ts +116 -0
- package/src/GitHubTool.ts +315 -0
- package/src/GitTool.ts +214 -0
- package/src/Interaction.ts +23 -0
- package/src/McpServer.ts +168 -0
- package/src/Mermaid.ts +112 -0
- package/src/Pack.ts +213 -0
- package/src/Package.ts +1 -0
- package/src/Persistence.ts +198 -0
- package/src/Plan.ts +119 -0
- package/src/PlanExecution.ts +46 -0
- package/src/Planner.ts +134 -0
- package/src/PrSummary.ts +37 -0
- package/src/PriceList.ts +91 -0
- package/src/Provenance.ts +85 -0
- package/src/Replay.ts +265 -0
- package/src/Review.ts +337 -0
- package/src/ReviewCache.ts +45 -0
- package/src/Reviewer.ts +31 -0
- package/src/SpecChecks.ts +143 -0
- package/src/Survey.ts +144 -0
- package/src/TransientRetry.ts +238 -0
- package/src/Workspace.ts +255 -0
- package/src/WorkspaceLayout.ts +22 -0
- package/src/WorkspaceTools.ts +188 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BenchReport.js","sourceRoot":"","sources":["../src/BenchReport.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAmB,MAAM,YAAY,CAAA;AAC7E,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAkB,MAAM,gBAAgB,CAAA;AAEzF,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAEhD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,MAA6B,EAAU,EAAE;IAC9D,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,CAAC,CAAA;IACV,CAAC;IACD,MAAM,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAA;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IAC5C,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC;QAC5B,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAA;AAC7D,CAAC,CAAA;AAYD,MAAM,cAAc,GAAG,CAAC,YAAoB,EAAU,EAAE;IACtD,IAAI,YAAY,IAAI,SAAS,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IACpD,CAAC;IACD,IAAI,YAAY,IAAI,MAAM,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IACjD,CAAC;IACD,OAAO,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;AAChD,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,MAAc,EAAU,EAAE;IAC9C,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAClC,OAAO,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IAC9C,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QAC9B,OAAO,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;IAC1C,CAAC;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;AACtC,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,CAAA;AAC7E,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAA;AACvE,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,CAAC,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;AAE9E,MAAM,MAAM,GAAG,CAAC,OAAmC,EAAE,MAAc,EAAU,EAAE;IAC7E,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAClC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IAClC,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;QACrE,CAAC,CAAC,GAAG,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG;QACzF,CAAC,CAAC,IAAI,CAAA;AACV,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,MAAmB,EAAsB,EAAE;IAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,WAAW,IAAI,EAAE,CAAA;IAChD,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IACjE,OAAO,OAAO,IAAI,CAAC;QACjB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,GAAG,GAAG,CAAA;AAC3E,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CAAC,MAAmB,EAAU,EAAE,CACxD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAA;AAExE,MAAM,iBAAiB,GAAG,CAAC,MAAmB,EAAU,EAAE,CACxD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;AAEpE,MAAM,eAAe,GAAG,CAAC,gBAAyB,EAAyB,EAAE,CAAC;IAC5E;QACE,KAAK,EAAE,YAAY;QACnB,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO;QACjC,MAAM,EAAE,cAAc;KACvB;IACD;QACE,KAAK,EAAE,cAAc;QACrB,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW;QACrC,MAAM,EAAE,YAAY;KACrB;IACD;QACE,KAAK,EAAE,eAAe;QACtB,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,YAAY;KACrB;IACD;QACE,KAAK,EAAE,cAAc;QACrB,SAAS,EAAE,SAAS;QACpB,KAAK,EAAE,iBAAiB;QACxB,MAAM,EAAE,YAAY;KACrB;IACD;QACE,KAAK,EAAE,sBAAsB;QAC7B,SAAS,EAAE,OAAO;QAClB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW;QACrC,MAAM,EAAE,aAAa;KACtB;IACD;QACE,KAAK,EAAE,cAAc;QACrB,SAAS,EAAE,QAAQ;QACnB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAChB,MAAM,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,MAAM,EAAE,aAAa;QACrB,GAAG,EAAE,aAAa;KACnB;IACD;QACE,KAAK,EAAE,cAAc;QACrB,SAAS,EAAE,QAAQ;QACnB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAChB,MAAM,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5F,MAAM,EAAE,aAAa;QACrB,GAAG,EAAE,aAAa;KACnB;IACD;QACE,KAAK,EAAE,YAAY;QACnB,SAAS,EAAE,QAAQ;QACnB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,WAAW;QAC9C,MAAM,EAAE,aAAa;KACtB;IACD;QACE,KAAK,EAAE,aAAa;QACpB,SAAS,EAAE,gBAAgB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QAClD,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,aAAa;KACtB;CACF,CAAA;AAED,MAAM,OAAO,GAAG,CAAC,MAAc,EAAE,MAA6B,EAAU,EAAE;IACxE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;IAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;IAChC,MAAM,UAAU,GAAG,IAAI,GAAG,GAAG,CAAA;IAC7B,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAA;IACpE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;AAClF,CAAC,CAAA;AAED,MAAM,SAAS,GAAG,CAChB,MAAc,EACd,SAAgC,EAChC,UAA2D,EACnD,EAAE;IACV,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACjE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;YAClC,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;QACF,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IACF,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAmB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAA;IAClF,MAAM,IAAI,GACR,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QACrD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,CAAC,SAAS,KAAK,OAAO;YAC5B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;YACzB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAA;IAC/B,MAAM,KAAK,GACT,MAAM,CAAC,SAAS,KAAK,SAAS,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC;QACrD,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,MAAM,CAAC,SAAS,KAAK,OAAO;YAC5B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC;YACzB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAA;IAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;QAC5B,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,CAAC,CAAA;QAC9D,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;YAChE,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,OAAO,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,KAAK,OAAO,MAAM,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,OAAO,KAAK,CAAC,CAAC,CAAC,OAAO,CAAA;IAC1F,CAAC,CAAC,CAAA;IACF,OAAO,KAAK,MAAM,CAAC,KAAK,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAA;AACtF,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CACnB,MAAmB,EACnB,KAAiB,EACoD,EAAE;IACvE,IAAI,KAAK,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAC/B,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5F,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,IAAI,GAAG,eAAe,CAC1B,MAAM,CAAC,cAAc,EACrB,UAAU,CAAC,IAAI,CAAC;QACd,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;QAC3B,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,UAAU;QACnC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK;QACzB,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;KACrE,CAAC,CACH,CAAA;IACD,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AACtD,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CACpB,MAAmB,EACkD,EAAE;IACvE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC7C,MAAM,IAAI,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QACxC,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IACF,OAAO,MAAM,CAAC,MAAM,KAAK,CAAC;QACxB,CAAC,CAAC,SAAS;QACX,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAA;AAChG,CAAC,CAAA;AAED,MAAM,OAAO,GAAG,CACd,SAAgC,EAChC,UAA2D,EAC3D,MAAuE,EAC/D,EAAE;IACV,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACvC,MAAM,MAAM,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACjE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;YAC5B,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;QACF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,GAAG,CAAA;QACZ,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;QACnE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAA;QAC1C,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAA;IAChD,CAAC,CAAC,CAAA;IACF,OAAO,uBAAuB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA;AACxD,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,CACjB,QAAgB,EAChB,SAAgC,EAChC,UAA2D,EACnD,EAAE;IACV,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACtC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;QAC9C,MAAM,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAClD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAA;YAC3C,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,GAAG,KAAK,CAAC,CAAA;QACvD,CAAC,CAAC,CAAA;QACF,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAA;YAC3C,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,CAAA;QACnD,CAAC,CAAC,CAAA;QACF,IAAI,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,OAAO,KAAK,QAAQ,gBAAgB,CAAA;QACtC,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAA;QACvC,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;QACzC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAC,MAAM,CAAC,MAAM,YAAY,CAC9D,MAAM,GAAG,QAAQ,CAClB,MAAM,cAAc,CAAC,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAA;IACpD,CAAC,CAAC,CAAA;IACF,OAAO;QACL,mBAAmB,QAAQ,WAAW;QACtC,EAAE;QACF,mEAAmE;QACnE,mEAAmE;QACnE,GAAG,IAAI;QACP,EAAE;QACF,wEAAwE;KACzE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC,CAAA;AAED,MAAM,aAAa,GAAG,CACpB,OAAmC,EACnC,eAAmC,EAC3B,EAAE;IACV,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/E,MAAM,UAAU,GAAG,IAAI,GAAG,CACxB,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC;QAC1B,QAAQ;QACR,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC;KACzD,CAAC,CACH,CAAA;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACxB,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,gBAAgB,GACpB,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAA;IAChG,MAAM,SAAS,GAAG,gBAAgB;QAChC,CAAC,CAAC,UAAU,KAAK,CAAC,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,+BAA+B;QACpF,CAAC,CAAC,mDAAmD,CAAA;IACvD,MAAM,MAAM,GAAG,cAAc,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;IAC5D,MAAM,SAAS,GAAG,cAAc,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAA;IACnF,MAAM,QAAQ,GAAG,eAAe,SAAS;SACtC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QAChB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;QAC5C,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;YACpD,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,SAAS,IAAI;YACvC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,SAAS,CAAC,CAAA;IACtC,CAAC,CAAC;SACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA;IACrB,MAAM,UAAU,GAAG;QACjB,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;KAClF,CAAA;IACD,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAW;YACvB,KAAK,EAAE,UAAU;YACjB,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE,EAAE;YAC9E,MAAM,EAAE,cAAc;SACvB,CAAA;QACD,MAAM,MAAM,GAAW;YACrB,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,OAAO;YAClB,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE;gBAChB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;gBACnE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,CAAA;YACnF,CAAC;YACD,MAAM,EAAE,YAAY;SACrB,CAAA;QACD,OAAO;YACL,OAAO,SAAS,EAAE;YAClB,EAAE;YACF,MAAM;YACN,SAAS;YACT,SAAS,CAAC,QAAQ,EAAE,SAAS,EAAE,UAAU,CAAC;YAC1C,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC;YACxC,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE;gBACxC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;gBACnE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YACtE,CAAC,CAAC;SACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACd,CAAC,CAAC,CAAA;IACF,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAA;IAC/E,MAAM,MAAM,GAAG;QACb,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YACvB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC;gBACE,aAAa;gBACb,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,KAAK,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC;aACvF,CAAC;QACN,GAAG,CAAC,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QAC9F,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC;YACnD,CAAC,CAAC;gBACE,uGAAuG;aACxG;YACH,CAAC,CAAC,EAAE,CAAC;QACP,GAAG,CAAC,SAAS;YACX,CAAC,CAAC,CAAC,iFAAiF,CAAC;YACrF,CAAC,CAAC,EAAE,CAAC;QACP,cAAc,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;KACnG,CAAA;IACD,OAAO;QACL,iBAAiB,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QACvE,EAAE;QACF,IAAI,SAAS,GAAG;QAChB,EAAE;QACF,aAAa;QACb,EAAE;QACF,MAAM;QACN,SAAS;QACT,QAAQ;QACR,GAAG,eAAe,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;QAC9F,OAAO,CAAC,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC;QAC7C,EAAE;QACF,WAAW;QACX,EAAE;QACF,GAAG,aAAa;QAChB,GAAG,MAAM;KACV,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,OAAmC,EACnC,eAAwB,EAChB,EAAE;IACV,MAAM,MAAM,GAAG,IAAI,GAAG,EAA8B,CAAA;IACpD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,kBAAkB,EAAE,CAAA;QAC1D,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IACvD,CAAC;IACD,OAAO,CAAC,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;SACzB,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;SACpD,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;SACzD,IAAI,CAAC,MAAM,CAAC,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,CAAC,WAAW,CAAC,CAAA;AAErD,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,EAAE,CAAC,iCAAiC,CAAC,CAAC,QAAQ,CAAC,EACrF,KAA0B,EAC1B,IAAY,EACZ,MAAmB;IAEnB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CACjE,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,cAAc,CAAC,IAAI,CAAC;QAClB,OAAO,EAAE,sCAAsC,MAAM,CAAC,KAAK,CAAC,EAAE;KAC/D,CAAC,CACH,CACF,CAAA;IACD,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,OAAO,IAAI,CAAC,CAAA;AAC3C,CAAC,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,EAAE,CAAC,+BAA+B,CAAC,CAAC,QAAQ,CAAC,EAClF,KAA0B,EAC1B,IAAY;IAEZ,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACxC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAA;IACX,CAAC;IACD,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CACnC,QAAQ;SACL,KAAK,CAAC,QAAQ,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,EACpC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,MAAM,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAC/C,MAAM,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CACxB,cAAc,CAAC,IAAI,CAAC;QAClB,OAAO,EAAE,iCAAiC,IAAI,IAAI,KAAK,GAAG,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,EAAE;KAChF,CAAC,CACH,CACF,EACH,EAAE,WAAW,EAAE,CAAC,EAAE,CACnB,CAAA;IACD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,CAAC,aAAa,KAAK,kBAAkB,EAAE,CAAC;YAChD,OAAO,KAAK,CAAC,CAAC,wBAAwB,CAAC,IAAI,CAAC;gBAC1C,IAAI;gBACJ,QAAQ,EAAE,kBAAkB;gBAC5B,MAAM,EAAE,MAAM,CAAC,aAAa;aAC7B,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IACD,OAAO,OAAO,CAAA;AAChB,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { type Capability } from "@llm4ts/core/Capability";
|
|
3
|
+
import { FlowCapabilityDenied } from "./FlowError.ts";
|
|
4
|
+
import { type FlowEventsShape } from "./FlowEvents.ts";
|
|
5
|
+
export declare const guarded: <A, E, R>(capability: Capability, operation: string, events: FlowEventsShape, effect: Effect.Effect<A, E, R>) => Effect.Effect<A, E | FlowCapabilityDenied, R>;
|
|
6
|
+
//# sourceMappingURL=CapabilityGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CapabilityGuard.d.ts","sourceRoot":"","sources":["../src/CapabilityGuard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAyB,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAA8C,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAKlG,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7B,YAAY,UAAU,EACtB,WAAW,MAAM,EACjB,QAAQ,eAAe,EACvB,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC7B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,oBAAoB,EAAE,CAAC,CA6B3C,CAAA"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { allows, currentGrants } from "@llm4ts/core/Capability";
|
|
3
|
+
import { FlowCapabilityDenied } from "./FlowError.js";
|
|
4
|
+
import { CapabilityDeniedEvent, CapabilityUsedEvent } from "./FlowEvents.js";
|
|
5
|
+
const capabilityName = (capability) => capability._tag === "Exec" ? `Exec(${capability.command})` : capability._tag;
|
|
6
|
+
export const guarded = (capability, operation, events, effect) => Effect.flatMap(currentGrants, (grants) => {
|
|
7
|
+
if (!allows(grants, capability)) {
|
|
8
|
+
return events
|
|
9
|
+
.publish(CapabilityDeniedEvent.make({
|
|
10
|
+
capability: capabilityName(capability),
|
|
11
|
+
operation
|
|
12
|
+
}))
|
|
13
|
+
.pipe(Effect.andThen(Effect.fail(FlowCapabilityDenied.make({
|
|
14
|
+
capability,
|
|
15
|
+
operation
|
|
16
|
+
}))));
|
|
17
|
+
}
|
|
18
|
+
return events
|
|
19
|
+
.publish(CapabilityUsedEvent.make({
|
|
20
|
+
capability: capabilityName(capability),
|
|
21
|
+
operation
|
|
22
|
+
}))
|
|
23
|
+
.pipe(Effect.andThen(effect));
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=CapabilityGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CapabilityGuard.js","sourceRoot":"","sources":["../src/CapabilityGuard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,aAAa,EAAmB,MAAM,yBAAyB,CAAA;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAwB,MAAM,iBAAiB,CAAA;AAElG,MAAM,cAAc,GAAG,CAAC,UAAsB,EAAU,EAAE,CACxD,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAA;AAE9E,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,UAAsB,EACtB,SAAiB,EACjB,MAAuB,EACvB,MAA8B,EACiB,EAAE,CACjD,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,MAAM,EAAiD,EAAE;IACtF,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;QAChC,OAAO,MAAM;aACV,OAAO,CACN,qBAAqB,CAAC,IAAI,CAAC;YACzB,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC;YACtC,SAAS;SACV,CAAC,CACH;aACA,IAAI,CACH,MAAM,CAAC,OAAO,CACZ,MAAM,CAAC,IAAI,CACT,oBAAoB,CAAC,IAAI,CAAC;YACxB,UAAU;YACV,SAAS;SACV,CAAC,CACH,CACF,CACF,CAAA;IACL,CAAC;IACD,OAAO,MAAM;SACV,OAAO,CACN,mBAAmB,CAAC,IAAI,CAAC;QACvB,UAAU,EAAE,cAAc,CAAC,UAAU,CAAC;QACtC,SAAS;KACV,CAAC,CACH;SACA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;AACjC,CAAC,CAAC,CAAA"}
|
package/dist/Chat.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import type { LlmServiceShape } from "@llm4ts/core/LlmService";
|
|
3
|
+
import { Message } from "@llm4ts/core/Models";
|
|
4
|
+
import { FlowLlmError } from "./FlowError.ts";
|
|
5
|
+
export declare const gitOwnershipInstruction = "The flow runtime owns git operations. Do not create or switch branches, commit, push, or open pull requests.";
|
|
6
|
+
export interface ChatOptions {
|
|
7
|
+
readonly system?: string;
|
|
8
|
+
readonly manageGit?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface Chat {
|
|
11
|
+
readonly ask: (prompt: string) => Effect.Effect<string, FlowLlmError>;
|
|
12
|
+
readonly messages: Effect.Effect<ReadonlyArray<Message>>;
|
|
13
|
+
}
|
|
14
|
+
export declare const makeChat: (service: LlmServiceShape, options?: ChatOptions | undefined) => Effect.Effect<Chat, never, never>;
|
|
15
|
+
//# sourceMappingURL=Chat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chat.d.ts","sourceRoot":"","sources":["../src/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAE7C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,eAAO,MAAM,uBAAuB,iHAC4E,CAAA;AAEhH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAC7B;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAA;IACrE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAA;CACzD;AAcD,eAAO,MAAM,QAAQ,oGA0BnB,CAAA"}
|
package/dist/Chat.js
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Ref from "effect/Ref";
|
|
3
|
+
import * as Semaphore from "effect/Semaphore";
|
|
4
|
+
import { Message } from "@llm4ts/core/Models";
|
|
5
|
+
import { collect } from "@llm4ts/core/Streaming";
|
|
6
|
+
import { FlowLlmError } from "./FlowError.js";
|
|
7
|
+
export const gitOwnershipInstruction = "The flow runtime owns git operations. Do not create or switch branches, commit, push, or open pull requests.";
|
|
8
|
+
const initialHistory = (options) => {
|
|
9
|
+
const system = options.manageGit === true
|
|
10
|
+
? options.system
|
|
11
|
+
: [gitOwnershipInstruction, options.system]
|
|
12
|
+
.filter((part) => part !== undefined && part.length > 0)
|
|
13
|
+
.join("\n\n");
|
|
14
|
+
return system === undefined || system.length === 0
|
|
15
|
+
? []
|
|
16
|
+
: [Message.make({ role: "System", content: system })];
|
|
17
|
+
};
|
|
18
|
+
export const makeChat = Effect.fn("@llm4ts/flow/Chat.make")(function* (service, options = {}) {
|
|
19
|
+
const history = yield* Ref.make(initialHistory(options));
|
|
20
|
+
const gate = yield* Semaphore.make(1);
|
|
21
|
+
const askRound = Effect.fn("@llm4ts/flow/Chat.ask")(function* (prompt) {
|
|
22
|
+
const userTurn = Message.make({ role: "User", content: prompt });
|
|
23
|
+
const messages = [...(yield* Ref.get(history)), userTurn];
|
|
24
|
+
const response = yield* collect(service.executeStreamWithHistory(messages)).pipe(Effect.mapError(FlowLlmError.from));
|
|
25
|
+
yield* Ref.set(history, [
|
|
26
|
+
...messages,
|
|
27
|
+
Message.make({ role: "Assistant", content: response.content })
|
|
28
|
+
]);
|
|
29
|
+
return response.content;
|
|
30
|
+
});
|
|
31
|
+
return {
|
|
32
|
+
ask: (prompt) => gate.withPermit(askRound(prompt)),
|
|
33
|
+
messages: Ref.get(history)
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
//# sourceMappingURL=Chat.js.map
|
package/dist/Chat.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Chat.js","sourceRoot":"","sources":["../src/Chat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,YAAY,CAAA;AACjC,OAAO,KAAK,SAAS,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAE7C,MAAM,CAAC,MAAM,uBAAuB,GAClC,8GAA8G,CAAA;AAYhH,MAAM,cAAc,GAAG,CAAC,OAAoB,EAA0B,EAAE;IACtE,MAAM,MAAM,GACV,OAAO,CAAC,SAAS,KAAK,IAAI;QACxB,CAAC,CAAC,OAAO,CAAC,MAAM;QAChB,CAAC,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC;aACtC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;aACvD,IAAI,CAAC,MAAM,CAAC,CAAA;IACrB,OAAO,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAChD,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;AACzD,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,wBAAwB,CAAC,CAAC,QAAQ,CAAC,EACnE,OAAwB,EACxB,UAAuB,EAAE;IAEzB,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAA;IACxD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAErC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAC,QAAQ,CAAC,EAC3D,MAAc;QAEd,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAA;QAChE,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;QACzD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAC9E,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,CACnC,CAAA;QACD,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE;YACtB,GAAG,QAAQ;YACX,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAO,EAAE,CAAC;SAC/D,CAAC,CAAA;QACF,OAAO,QAAQ,CAAC,OAAO,CAAA;IACzB,CAAC,CAAC,CAAA;IAEF,OAAO;QACL,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAClD,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC;KAC3B,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { type Capability } from "@llm4ts/core/Capability";
|
|
3
|
+
import { FlowCapabilityDenied } from "./FlowError.ts";
|
|
4
|
+
import { FlowEvents } from "./FlowEvents.ts";
|
|
5
|
+
export declare const guarded: <A, E, R>(capability: Capability, operation: string, body: Effect.Effect<A, E, R>) => Effect.Effect<A, E | FlowCapabilityDenied, R | FlowEvents>;
|
|
6
|
+
export declare class Classified<A> {
|
|
7
|
+
private readonly value;
|
|
8
|
+
private constructor();
|
|
9
|
+
static of<A>(value: A): Classified<A>;
|
|
10
|
+
map<B>(transform: (value: A) => B): Classified<B>;
|
|
11
|
+
declassify(label: string): Effect.Effect<A, FlowCapabilityDenied, FlowEvents>;
|
|
12
|
+
toString(): string;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=Classified.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Classified.d.ts","sourceRoot":"","sources":["../src/Classified.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAgB,KAAK,UAAU,EAAyB,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,UAAU,EAA0C,MAAM,iBAAiB,CAAA;AAiBpF,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAC7B,YAAY,UAAU,EACtB,WAAW,MAAM,EACjB,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC3B,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,oBAAoB,EAAE,CAAC,GAAG,UAAU,CAgBxD,CAAA;AAEJ,qBAAa,UAAU,CAAC,CAAC;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK;IAA1C,OAAO;IAEP,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAIrC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAIjD,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,oBAAoB,EAAE,UAAU,CAAC;IAU7E,QAAQ,IAAI,MAAM;CAGnB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import { Capabilities, allows, currentGrants } from "@llm4ts/core/Capability";
|
|
3
|
+
import { FlowCapabilityDenied } from "./FlowError.js";
|
|
4
|
+
import { FlowEvents, FlowEventsValues } from "./FlowEvents.js";
|
|
5
|
+
const capabilityName = (capability) => capability._tag === "Exec" ? `Exec(${capability.command})` : capability._tag;
|
|
6
|
+
const shouldAuditUse = (capability) => {
|
|
7
|
+
switch (capability._tag) {
|
|
8
|
+
case "GitPush":
|
|
9
|
+
case "GhWrite":
|
|
10
|
+
case "AdoWrite":
|
|
11
|
+
case "Exec":
|
|
12
|
+
return true;
|
|
13
|
+
default:
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
export const guarded = (capability, operation, body) => Effect.gen(function* () {
|
|
18
|
+
const events = yield* FlowEvents;
|
|
19
|
+
const grants = yield* currentGrants;
|
|
20
|
+
const name = capabilityName(capability);
|
|
21
|
+
if (!allows(grants, capability)) {
|
|
22
|
+
yield* events.publish(FlowEventsValues.CapabilityDenied(name, operation));
|
|
23
|
+
return yield* new FlowCapabilityDenied({ capability, operation });
|
|
24
|
+
}
|
|
25
|
+
if (shouldAuditUse(capability)) {
|
|
26
|
+
yield* events.publish(FlowEventsValues.CapabilityUsed(name, operation));
|
|
27
|
+
}
|
|
28
|
+
return yield* body;
|
|
29
|
+
});
|
|
30
|
+
export class Classified {
|
|
31
|
+
value;
|
|
32
|
+
constructor(value) {
|
|
33
|
+
this.value = value;
|
|
34
|
+
}
|
|
35
|
+
static of(value) {
|
|
36
|
+
return new Classified(value);
|
|
37
|
+
}
|
|
38
|
+
map(transform) {
|
|
39
|
+
return new Classified(transform(this.value));
|
|
40
|
+
}
|
|
41
|
+
declassify(label) {
|
|
42
|
+
return guarded(Capabilities.Declassify, `declassify ${label}`, Effect.flatMap(FlowEvents, (events) => Effect.as(events.publish(FlowEventsValues.Declassified(label)), this.value)));
|
|
43
|
+
}
|
|
44
|
+
toString() {
|
|
45
|
+
return "Classified(…)";
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=Classified.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Classified.js","sourceRoot":"","sources":["../src/Classified.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,YAAY,EAAmB,MAAM,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAwB,MAAM,iBAAiB,CAAA;AAEpF,MAAM,cAAc,GAAG,CAAC,UAAsB,EAAU,EAAE,CACxD,UAAU,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,UAAU,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAA;AAE9E,MAAM,cAAc,GAAG,CAAC,UAAsB,EAAW,EAAE;IACzD,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,SAAS,CAAC;QACf,KAAK,SAAS,CAAC;QACf,KAAK,UAAU,CAAC;QAChB,KAAK,MAAM;YACT,OAAO,IAAI,CAAA;QACb;YACE,OAAO,KAAK,CAAA;IAChB,CAAC;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CACrB,UAAsB,EACtB,SAAiB,EACjB,IAA4B,EACgC,EAAE,CAC9D,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,MAAM,GAAoB,KAAK,CAAC,CAAC,UAAU,CAAA;IACjD,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,aAAa,CAAA;IACnC,MAAM,IAAI,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;IAEvC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;QACzE,OAAO,KAAK,CAAC,CAAC,IAAI,oBAAoB,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,CAAA;IACnE,CAAC;IAED,IAAI,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAA;IACzE,CAAC;IAED,OAAO,KAAK,CAAC,CAAC,IAAI,CAAA;AACpB,CAAC,CAAC,CAAA;AAEJ,MAAM,OAAO,UAAU;IACgB;IAArC,YAAqC,KAAQ;QAAR,UAAK,GAAL,KAAK,CAAG;IAAG,CAAC;IAEjD,MAAM,CAAC,EAAE,CAAI,KAAQ;QACnB,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;IAC9B,CAAC;IAED,GAAG,CAAI,SAA0B;QAC/B,OAAO,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,UAAU,CAAC,KAAa;QACtB,OAAO,OAAO,CACZ,YAAY,CAAC,UAAU,EACvB,cAAc,KAAK,EAAE,EACrB,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,EAAE,CACpC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAC5E,CACF,CAAA;IACH,CAAC;IAED,QAAQ;QACN,OAAO,eAAe,CAAA;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Schema from "effect/Schema";
|
|
3
|
+
import { BudgetExceeded, PlanParseError } from "./FlowError.ts";
|
|
4
|
+
import type { PlainFileStoreShape } from "./Persistence.ts";
|
|
5
|
+
declare const CostCell_base: Schema.Class<CostCell, Schema.Struct<{
|
|
6
|
+
readonly stage: Schema.String;
|
|
7
|
+
readonly agent: Schema.String;
|
|
8
|
+
readonly model: Schema.String;
|
|
9
|
+
readonly prompt: Schema.Int;
|
|
10
|
+
readonly completion: Schema.Int;
|
|
11
|
+
readonly cached: Schema.optionalKey<Schema.Int>;
|
|
12
|
+
readonly total: Schema.Int;
|
|
13
|
+
readonly costUsd: Schema.optionalKey<Schema.Number>;
|
|
14
|
+
}>, {}>;
|
|
15
|
+
export declare class CostCell extends CostCell_base {
|
|
16
|
+
}
|
|
17
|
+
declare const CostRecord_base: Schema.Class<CostRecord, Schema.Struct<{
|
|
18
|
+
readonly schemaVersion: Schema.Int;
|
|
19
|
+
readonly runId: Schema.String;
|
|
20
|
+
readonly at: Schema.String;
|
|
21
|
+
readonly repo: Schema.String;
|
|
22
|
+
readonly label: Schema.optionalKey<Schema.String>;
|
|
23
|
+
readonly promptHead: Schema.String;
|
|
24
|
+
readonly promptHash: Schema.String;
|
|
25
|
+
readonly pricesAsOf: Schema.String;
|
|
26
|
+
readonly cells: Schema.$Array<typeof CostCell>;
|
|
27
|
+
readonly totalPrompt: Schema.Int;
|
|
28
|
+
readonly totalCompletion: Schema.Int;
|
|
29
|
+
readonly totalCostUsd: Schema.optionalKey<Schema.Number>;
|
|
30
|
+
}>, {}>;
|
|
31
|
+
export declare class CostRecord extends CostRecord_base {
|
|
32
|
+
}
|
|
33
|
+
export declare const CurrentCostRecordSchema = 1;
|
|
34
|
+
export declare const CostLedgerFileName = "costs.jsonl";
|
|
35
|
+
export interface CostRecordInput {
|
|
36
|
+
readonly runId: string;
|
|
37
|
+
readonly at: string;
|
|
38
|
+
readonly repo: string;
|
|
39
|
+
readonly label?: string;
|
|
40
|
+
readonly prompt: string;
|
|
41
|
+
readonly cells: ReadonlyArray<CostCell>;
|
|
42
|
+
}
|
|
43
|
+
export declare const makeCostRecord: (input: CostRecordInput) => CostRecord;
|
|
44
|
+
declare const CostBudget_base: Schema.Class<CostBudget, Schema.Struct<{
|
|
45
|
+
readonly maximumTokens: Schema.optionalKey<Schema.Int>;
|
|
46
|
+
readonly maximumCostUsd: Schema.optionalKey<Schema.Number>;
|
|
47
|
+
}>, {}>;
|
|
48
|
+
export declare class CostBudget extends CostBudget_base {
|
|
49
|
+
}
|
|
50
|
+
export declare const checkCostBudget: (record: CostRecord, budget: CostBudget) => Effect.Effect<void, BudgetExceeded>;
|
|
51
|
+
export declare const appendCostRecord: (files: PlainFileStoreShape, path: string, record: CostRecord) => Effect.Effect<void, import("./FlowError.ts").PersistenceError | PlanParseError | import("./FlowError.ts").UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | import("./FlowError.ts").ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | BudgetExceeded, never>;
|
|
52
|
+
export declare const loadCostLedger: (files: PlainFileStoreShape, path: string) => Effect.Effect<readonly CostRecord[], import("./FlowError.ts").PersistenceError | PlanParseError | import("./FlowError.ts").UnsupportedSchemaVersion | import("./FlowError.ts").WorkspacePathError | import("./FlowError.ts").WorkspaceLimitError | import("./FlowError.ts").WorkspaceIoError | import("./FlowError.ts").FlowAborted | import("./FlowError.ts").ProcessError | import("./FlowError.ts").FlowLlmError | import("./FlowError.ts").FlowCapabilityDenied | BudgetExceeded, never>;
|
|
53
|
+
export declare const mergeCostCells: (records: ReadonlyArray<CostRecord>) => ReadonlyArray<CostCell>;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=CostLedger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CostLedger.d.ts","sourceRoot":"","sources":["../src/CostLedger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAkB,MAAM,gBAAgB,CAAA;AAC/E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;;;;;;;;;;;AAI3D,qBAAa,QAAS,SAAQ,aAS5B;CAAG;;;;;;;;;;;;;;;AAEL,qBAAa,UAAW,SAAQ,eAa9B;CAAG;AAEL,eAAO,MAAM,uBAAuB,IAAI,CAAA;AACxC,eAAO,MAAM,kBAAkB,gBAAgB,CAAA;AAE/C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAA;CACxC;AAED,eAAO,MAAM,cAAc,GAAI,OAAO,eAAe,KAAG,UAgBvD,CAAA;;;;;AAED,qBAAa,UAAW,SAAQ,eAG9B;CAAG;AAEL,eAAO,MAAM,eAAe,GAC1B,QAAQ,UAAU,EAClB,QAAQ,UAAU,KACjB,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,cAAc,CAqBpC,CAAA;AAID,eAAO,MAAM,gBAAgB,+gBAa3B,CAAA;AAEF,eAAO,MAAM,cAAc,4gBAqBzB,CAAA;AAOF,eAAO,MAAM,cAAc,GAAI,SAAS,aAAa,CAAC,UAAU,CAAC,KAAG,aAAa,CAAC,QAAQ,CA+BzF,CAAA"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Schema from "effect/Schema";
|
|
3
|
+
import { BudgetExceeded, PlanParseError } from "./FlowError.js";
|
|
4
|
+
import { stableHash } from "./Plan.js";
|
|
5
|
+
import { PricesAsOf } from "./PriceList.js";
|
|
6
|
+
export class CostCell extends Schema.Class("CostCell")({
|
|
7
|
+
stage: Schema.String,
|
|
8
|
+
agent: Schema.String,
|
|
9
|
+
model: Schema.String,
|
|
10
|
+
prompt: Schema.Int,
|
|
11
|
+
completion: Schema.Int,
|
|
12
|
+
cached: Schema.optionalKey(Schema.Int),
|
|
13
|
+
total: Schema.Int,
|
|
14
|
+
costUsd: Schema.optionalKey(Schema.Number)
|
|
15
|
+
}) {
|
|
16
|
+
}
|
|
17
|
+
export class CostRecord extends Schema.Class("CostRecord")({
|
|
18
|
+
schemaVersion: Schema.Int,
|
|
19
|
+
runId: Schema.String,
|
|
20
|
+
at: Schema.String,
|
|
21
|
+
repo: Schema.String,
|
|
22
|
+
label: Schema.optionalKey(Schema.String),
|
|
23
|
+
promptHead: Schema.String,
|
|
24
|
+
promptHash: Schema.String,
|
|
25
|
+
pricesAsOf: Schema.String,
|
|
26
|
+
cells: Schema.Array(CostCell),
|
|
27
|
+
totalPrompt: Schema.Int,
|
|
28
|
+
totalCompletion: Schema.Int,
|
|
29
|
+
totalCostUsd: Schema.optionalKey(Schema.Number)
|
|
30
|
+
}) {
|
|
31
|
+
}
|
|
32
|
+
export const CurrentCostRecordSchema = 1;
|
|
33
|
+
export const CostLedgerFileName = "costs.jsonl";
|
|
34
|
+
export const makeCostRecord = (input) => {
|
|
35
|
+
const costs = input.cells.flatMap((cell) => (cell.costUsd === undefined ? [] : [cell.costUsd]));
|
|
36
|
+
return CostRecord.make({
|
|
37
|
+
schemaVersion: CurrentCostRecordSchema,
|
|
38
|
+
runId: input.runId,
|
|
39
|
+
at: input.at,
|
|
40
|
+
repo: input.repo,
|
|
41
|
+
...(input.label === undefined ? {} : { label: input.label }),
|
|
42
|
+
promptHead: input.prompt.trim().replaceAll(/\s+/gu, " ").slice(0, 120),
|
|
43
|
+
promptHash: stableHash(input.prompt),
|
|
44
|
+
pricesAsOf: PricesAsOf,
|
|
45
|
+
cells: input.cells,
|
|
46
|
+
totalPrompt: input.cells.reduce((sum, cell) => sum + cell.prompt, 0),
|
|
47
|
+
totalCompletion: input.cells.reduce((sum, cell) => sum + cell.completion, 0),
|
|
48
|
+
...(costs.length === 0 ? {} : { totalCostUsd: costs.reduce((sum, cost) => sum + cost, 0) })
|
|
49
|
+
});
|
|
50
|
+
};
|
|
51
|
+
export class CostBudget extends Schema.Class("CostBudget")({
|
|
52
|
+
maximumTokens: Schema.optionalKey(Schema.Int),
|
|
53
|
+
maximumCostUsd: Schema.optionalKey(Schema.Number)
|
|
54
|
+
}) {
|
|
55
|
+
}
|
|
56
|
+
export const checkCostBudget = (record, budget) => {
|
|
57
|
+
const totalTokens = record.totalPrompt + record.totalCompletion;
|
|
58
|
+
if (budget.maximumTokens !== undefined && totalTokens > budget.maximumTokens) {
|
|
59
|
+
return Effect.fail(BudgetExceeded.make({
|
|
60
|
+
metric: "tokens",
|
|
61
|
+
limit: budget.maximumTokens,
|
|
62
|
+
actual: totalTokens
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
if (budget.maximumCostUsd !== undefined && (record.totalCostUsd ?? 0) > budget.maximumCostUsd) {
|
|
66
|
+
return Effect.fail(BudgetExceeded.make({
|
|
67
|
+
metric: "costUsd",
|
|
68
|
+
limit: budget.maximumCostUsd,
|
|
69
|
+
actual: record.totalCostUsd ?? 0
|
|
70
|
+
}));
|
|
71
|
+
}
|
|
72
|
+
return Effect.void;
|
|
73
|
+
};
|
|
74
|
+
const costRecordCodec = Schema.fromJsonString(CostRecord);
|
|
75
|
+
export const appendCostRecord = Effect.fn("@llm4ts/flow/CostLedger.append")(function* (files, path, record) {
|
|
76
|
+
const encoded = yield* Schema.encodeEffect(costRecordCodec)(record).pipe(Effect.mapError((error) => PlanParseError.make({
|
|
77
|
+
message: `failed to encode cost record: ${String(error)}`
|
|
78
|
+
})));
|
|
79
|
+
yield* files.append(path, `${encoded}\n`);
|
|
80
|
+
});
|
|
81
|
+
export const loadCostLedger = Effect.fn("@llm4ts/flow/CostLedger.load")(function* (files, path) {
|
|
82
|
+
const contents = yield* files.read(path);
|
|
83
|
+
if (contents === undefined) {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
const parsed = yield* Effect.forEach(contents
|
|
87
|
+
.split(/\r?\n/u)
|
|
88
|
+
.map((line) => line.trim())
|
|
89
|
+
.filter((line) => line.length > 0), (line) => Schema.decodeUnknownEffect(costRecordCodec)(line).pipe(Effect.option, Effect.map((option) => (option._tag === "Some" ? [option.value] : []))), { concurrency: 1 });
|
|
90
|
+
return parsed.flat();
|
|
91
|
+
});
|
|
92
|
+
const sumOptional = (values) => {
|
|
93
|
+
const present = values.flatMap((value) => (value === undefined ? [] : [value]));
|
|
94
|
+
return present.length === 0 ? undefined : present.reduce((sum, value) => sum + value, 0);
|
|
95
|
+
};
|
|
96
|
+
export const mergeCostCells = (records) => {
|
|
97
|
+
const groups = new Map();
|
|
98
|
+
for (const cell of records.flatMap((record) => record.cells)) {
|
|
99
|
+
const key = JSON.stringify([cell.stage, cell.agent, cell.model]);
|
|
100
|
+
groups.set(key, [...(groups.get(key) ?? []), cell]);
|
|
101
|
+
}
|
|
102
|
+
return [...groups.values()]
|
|
103
|
+
.map((cells) => {
|
|
104
|
+
const first = cells[0];
|
|
105
|
+
if (first === undefined) {
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
const cached = sumOptional(cells.map((cell) => cell.cached));
|
|
109
|
+
const costUsd = sumOptional(cells.map((cell) => cell.costUsd));
|
|
110
|
+
return CostCell.make({
|
|
111
|
+
stage: first.stage,
|
|
112
|
+
agent: first.agent,
|
|
113
|
+
model: first.model,
|
|
114
|
+
prompt: cells.reduce((sum, cell) => sum + cell.prompt, 0),
|
|
115
|
+
completion: cells.reduce((sum, cell) => sum + cell.completion, 0),
|
|
116
|
+
total: cells.reduce((sum, cell) => sum + cell.total, 0),
|
|
117
|
+
...(cached === undefined ? {} : { cached }),
|
|
118
|
+
...(costUsd === undefined ? {} : { costUsd })
|
|
119
|
+
});
|
|
120
|
+
})
|
|
121
|
+
.filter((cell) => cell !== undefined)
|
|
122
|
+
.sort((left, right) => [left.stage, left.agent, left.model]
|
|
123
|
+
.join("\0")
|
|
124
|
+
.localeCompare([right.stage, right.agent, right.model].join("\0")));
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=CostLedger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CostLedger.js","sourceRoot":"","sources":["../src/CostLedger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import type * as Scope from "effect/Scope";
|
|
3
|
+
import { CostCell } from "./CostLedger.ts";
|
|
4
|
+
import type { FlowEvent, FlowEventHub } from "./FlowEvents.ts";
|
|
5
|
+
export interface CostTracker {
|
|
6
|
+
readonly record: (event: FlowEvent) => Effect.Effect<void>;
|
|
7
|
+
readonly cells: Effect.Effect<ReadonlyArray<CostCell>>;
|
|
8
|
+
readonly summary: Effect.Effect<string>;
|
|
9
|
+
readonly consume: (hub: FlowEventHub) => Effect.Effect<void, never, Scope.Scope>;
|
|
10
|
+
readonly awaitDrained: (hub: FlowEventHub) => Effect.Effect<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare const makeCostTracker: () => Effect.Effect<CostTracker, never, never>;
|
|
13
|
+
//# sourceMappingURL=CostTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CostTracker.d.ts","sourceRoot":"","sources":["../src/CostTracker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAG1C,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAA;AAC1C,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAW9D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC1D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAA;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACvC,QAAQ,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;IAChF,QAAQ,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;CAClE;AAkFD,eAAO,MAAM,eAAe,gDAgE3B,CAAA"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import * as Effect from "effect/Effect";
|
|
2
|
+
import * as Ref from "effect/Ref";
|
|
3
|
+
import * as Stream from "effect/Stream";
|
|
4
|
+
import { TokenUsage } from "@llm4ts/core/Models";
|
|
5
|
+
import { CostCell } from "./CostLedger.js";
|
|
6
|
+
import { estimateCostUsd, PricesAsOf } from "./PriceList.js";
|
|
7
|
+
const emptyState = {
|
|
8
|
+
byAgent: new Map(),
|
|
9
|
+
byModel: new Map(),
|
|
10
|
+
byCell: new Map(),
|
|
11
|
+
cellKeys: new Map(),
|
|
12
|
+
openStages: []
|
|
13
|
+
};
|
|
14
|
+
const mergeUsage = (previous, usage) => {
|
|
15
|
+
const cachedValues = [previous?.cached, usage.cached].flatMap((value) => value === undefined ? [] : [value]);
|
|
16
|
+
return TokenUsage.make({
|
|
17
|
+
prompt: (previous?.prompt ?? 0) + usage.prompt,
|
|
18
|
+
completion: (previous?.completion ?? 0) + usage.completion,
|
|
19
|
+
total: (previous?.total ?? 0) + usage.total,
|
|
20
|
+
...(cachedValues.length === 0
|
|
21
|
+
? {}
|
|
22
|
+
: {
|
|
23
|
+
cached: cachedValues.reduce((sum, value) => sum + value, 0)
|
|
24
|
+
})
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
const addUsage = (values, key, usage) => new Map(values).set(key, mergeUsage(values.get(key), usage));
|
|
28
|
+
const updateCostState = (state, event) => {
|
|
29
|
+
switch (event._tag) {
|
|
30
|
+
case "TokensUsed": {
|
|
31
|
+
const model = event.model ?? "(unknown)";
|
|
32
|
+
const stage = state.openStages[0] ?? "(no stage)";
|
|
33
|
+
const cellKey = JSON.stringify([stage, event.agent, model]);
|
|
34
|
+
return {
|
|
35
|
+
...state,
|
|
36
|
+
byAgent: addUsage(state.byAgent, event.agent, event.usage),
|
|
37
|
+
byModel: addUsage(state.byModel, model, event.usage),
|
|
38
|
+
byCell: addUsage(state.byCell, cellKey, event.usage),
|
|
39
|
+
cellKeys: new Map(state.cellKeys).set(cellKey, [stage, event.agent, model])
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
case "StageStarted":
|
|
43
|
+
return { ...state, openStages: [event.stage, ...state.openStages] };
|
|
44
|
+
case "StageCompleted":
|
|
45
|
+
case "StageFailed":
|
|
46
|
+
return { ...state, openStages: state.openStages.slice(1) };
|
|
47
|
+
default:
|
|
48
|
+
return state;
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const tokenLine = (label, usage, cost) => {
|
|
52
|
+
const cached = usage.cached === undefined || usage.cached <= 0 ? "" : ` (${usage.cached} cached)`;
|
|
53
|
+
const money = cost === undefined ? "" : ` ($${cost.toFixed(4)}*)`;
|
|
54
|
+
return ` ${label}: ${usage.prompt} in${cached}, ${usage.completion} out${money}`;
|
|
55
|
+
};
|
|
56
|
+
const renderSummary = (state) => {
|
|
57
|
+
const agents = [...state.byAgent.entries()]
|
|
58
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
59
|
+
.map(([agent, usage]) => tokenLine(agent, usage, undefined));
|
|
60
|
+
const models = [...state.byModel.entries()]
|
|
61
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
62
|
+
.map(([model, usage]) => {
|
|
63
|
+
const cost = model === "(unknown)" ? undefined : estimateCostUsd(model, usage);
|
|
64
|
+
return { line: tokenLine(model, usage, cost), cost };
|
|
65
|
+
});
|
|
66
|
+
const total = models.reduce((sum, entry) => sum + (entry.cost ?? 0), 0);
|
|
67
|
+
const footnote = total <= 0
|
|
68
|
+
? ""
|
|
69
|
+
: `\n\n* estimated from the pricing table (rates as of ${PricesAsOf} — may be stale)`;
|
|
70
|
+
return `By agent:\n${agents.join("\n")}\n\nBy model:\n${models
|
|
71
|
+
.map(({ line }) => line)
|
|
72
|
+
.join("\n")}\n\nTotal: ${total <= 0 ? "$0.00" : `$${total.toFixed(4)}`}${footnote}`;
|
|
73
|
+
};
|
|
74
|
+
export const makeCostTracker = Effect.fn("@llm4ts/flow/CostTracker.make")(function* () {
|
|
75
|
+
const state = yield* Ref.make(emptyState);
|
|
76
|
+
const consumed = yield* Ref.make(0);
|
|
77
|
+
const record = (event) => Ref.update(state, (current) => updateCostState(current, event));
|
|
78
|
+
return {
|
|
79
|
+
record,
|
|
80
|
+
cells: Ref.get(state).pipe(Effect.map((current) => [...current.byCell.entries()]
|
|
81
|
+
.flatMap(([key, usage]) => {
|
|
82
|
+
const parts = current.cellKeys.get(key);
|
|
83
|
+
if (parts === undefined) {
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
const [stage, agent, model] = parts;
|
|
87
|
+
const costUsd = model === "(unknown)" ? undefined : estimateCostUsd(model, usage);
|
|
88
|
+
return [
|
|
89
|
+
CostCell.make({
|
|
90
|
+
stage,
|
|
91
|
+
agent,
|
|
92
|
+
model,
|
|
93
|
+
prompt: usage.prompt,
|
|
94
|
+
completion: usage.completion,
|
|
95
|
+
total: usage.total,
|
|
96
|
+
...(usage.cached === undefined ? {} : { cached: usage.cached }),
|
|
97
|
+
...(costUsd === undefined ? {} : { costUsd })
|
|
98
|
+
})
|
|
99
|
+
];
|
|
100
|
+
})
|
|
101
|
+
.sort((left, right) => [left.stage, left.agent, left.model]
|
|
102
|
+
.join("\0")
|
|
103
|
+
.localeCompare([right.stage, right.agent, right.model].join("\0"))))),
|
|
104
|
+
summary: Ref.get(state).pipe(Effect.map(renderSummary)),
|
|
105
|
+
consume: (hub) => Effect.gen(function* () {
|
|
106
|
+
const subscription = yield* hub.subscribe;
|
|
107
|
+
yield* Stream.fromSubscription(subscription).pipe(Stream.runForEach((event) => record(event).pipe(Effect.andThen(Ref.update(consumed, (count) => count + 1)))), Effect.forkScoped, Effect.asVoid);
|
|
108
|
+
}),
|
|
109
|
+
awaitDrained: (hub) => Effect.gen(function* () {
|
|
110
|
+
const target = yield* hub.publishedCount;
|
|
111
|
+
const drain = Effect.suspend(() => Ref.get(consumed).pipe(Effect.flatMap((count) => count >= target ? Effect.void : Effect.yieldNow.pipe(Effect.andThen(drain)))));
|
|
112
|
+
yield* drain;
|
|
113
|
+
})
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
//# sourceMappingURL=CostTracker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CostTracker.js","sourceRoot":"","sources":["../src/CostTracker.ts"],"names":[],"mappings":"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"}
|