@ashlr/hub 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1158 -0
- package/LICENSE +21 -0
- package/README.md +833 -0
- package/bin/ashlr +8 -0
- package/dist/api/core.d.ts +28 -0
- package/dist/api/core.js +42 -0
- package/dist/api/core.js.map +1 -0
- package/dist/api/index.d.ts +9 -0
- package/dist/api/index.js +9 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/plugin.d.ts +12 -0
- package/dist/api/plugin.js +13 -0
- package/dist/api/plugin.js.map +1 -0
- package/dist/api/types.d.ts +9 -0
- package/dist/api/types.js +9 -0
- package/dist/api/types.js.map +1 -0
- package/dist/cli/args.d.ts +20 -0
- package/dist/cli/args.js +23 -0
- package/dist/cli/args.js.map +1 -0
- package/dist/cli/ask.d.ts +22 -0
- package/dist/cli/ask.js +240 -0
- package/dist/cli/ask.js.map +1 -0
- package/dist/cli/audit.d.ts +26 -0
- package/dist/cli/audit.js +199 -0
- package/dist/cli/audit.js.map +1 -0
- package/dist/cli/backlog.d.ts +26 -0
- package/dist/cli/backlog.js +322 -0
- package/dist/cli/backlog.js.map +1 -0
- package/dist/cli/completions.d.ts +18 -0
- package/dist/cli/completions.js +156 -0
- package/dist/cli/completions.js.map +1 -0
- package/dist/cli/daemon.d.ts +31 -0
- package/dist/cli/daemon.js +334 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/demo-sandbox.d.ts +78 -0
- package/dist/cli/demo-sandbox.js +227 -0
- package/dist/cli/demo-sandbox.js.map +1 -0
- package/dist/cli/demo.d.ts +76 -0
- package/dist/cli/demo.js +285 -0
- package/dist/cli/demo.js.map +1 -0
- package/dist/cli/digest.d.ts +46 -0
- package/dist/cli/digest.js +352 -0
- package/dist/cli/digest.js.map +1 -0
- package/dist/cli/doctor-init.d.ts +28 -0
- package/dist/cli/doctor-init.js +335 -0
- package/dist/cli/doctor-init.js.map +1 -0
- package/dist/cli/genome.d.ts +62 -0
- package/dist/cli/genome.js +1061 -0
- package/dist/cli/genome.js.map +1 -0
- package/dist/cli/gh.d.ts +27 -0
- package/dist/cli/gh.js +322 -0
- package/dist/cli/gh.js.map +1 -0
- package/dist/cli/goals.d.ts +55 -0
- package/dist/cli/goals.js +667 -0
- package/dist/cli/goals.js.map +1 -0
- package/dist/cli/health.d.ts +56 -0
- package/dist/cli/health.js +407 -0
- package/dist/cli/health.js.map +1 -0
- package/dist/cli/help.d.ts +51 -0
- package/dist/cli/help.js +436 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/inbox.d.ts +28 -0
- package/dist/cli/inbox.js +589 -0
- package/dist/cli/inbox.js.map +1 -0
- package/dist/cli/index.d.ts +41 -0
- package/dist/cli/index.js +1208 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/knowledge.d.ts +33 -0
- package/dist/cli/knowledge.js +575 -0
- package/dist/cli/knowledge.js.map +1 -0
- package/dist/cli/mcp.d.ts +26 -0
- package/dist/cli/mcp.js +487 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/models.d.ts +26 -0
- package/dist/cli/models.js +435 -0
- package/dist/cli/models.js.map +1 -0
- package/dist/cli/new.d.ts +32 -0
- package/dist/cli/new.js +565 -0
- package/dist/cli/new.js.map +1 -0
- package/dist/cli/notify.d.ts +20 -0
- package/dist/cli/notify.js +188 -0
- package/dist/cli/notify.js.map +1 -0
- package/dist/cli/onboard.d.ts +85 -0
- package/dist/cli/onboard.js +305 -0
- package/dist/cli/onboard.js.map +1 -0
- package/dist/cli/open.d.ts +38 -0
- package/dist/cli/open.js +86 -0
- package/dist/cli/open.js.map +1 -0
- package/dist/cli/orient.d.ts +14 -0
- package/dist/cli/orient.js +110 -0
- package/dist/cli/orient.js.map +1 -0
- package/dist/cli/picker.d.ts +21 -0
- package/dist/cli/picker.js +177 -0
- package/dist/cli/picker.js.map +1 -0
- package/dist/cli/plugins.d.ts +21 -0
- package/dist/cli/plugins.js +394 -0
- package/dist/cli/plugins.js.map +1 -0
- package/dist/cli/preflight.d.ts +29 -0
- package/dist/cli/preflight.js +131 -0
- package/dist/cli/preflight.js.map +1 -0
- package/dist/cli/pulse.d.ts +26 -0
- package/dist/cli/pulse.js +482 -0
- package/dist/cli/pulse.js.map +1 -0
- package/dist/cli/reflect.d.ts +42 -0
- package/dist/cli/reflect.js +381 -0
- package/dist/cli/reflect.js.map +1 -0
- package/dist/cli/run.d.ts +29 -0
- package/dist/cli/run.js +687 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/sandbox.d.ts +20 -0
- package/dist/cli/sandbox.js +345 -0
- package/dist/cli/sandbox.js.map +1 -0
- package/dist/cli/seams.d.ts +41 -0
- package/dist/cli/seams.js +167 -0
- package/dist/cli/seams.js.map +1 -0
- package/dist/cli/serve.d.ts +25 -0
- package/dist/cli/serve.js +249 -0
- package/dist/cli/serve.js.map +1 -0
- package/dist/cli/ship.d.ts +33 -0
- package/dist/cli/ship.js +433 -0
- package/dist/cli/ship.js.map +1 -0
- package/dist/cli/spec.d.ts +19 -0
- package/dist/cli/spec.js +478 -0
- package/dist/cli/spec.js.map +1 -0
- package/dist/cli/swarm.d.ts +42 -0
- package/dist/cli/swarm.js +1365 -0
- package/dist/cli/swarm.js.map +1 -0
- package/dist/cli/telemetry.d.ts +26 -0
- package/dist/cli/telemetry.js +364 -0
- package/dist/cli/telemetry.js.map +1 -0
- package/dist/cli/tui.d.ts +17 -0
- package/dist/cli/tui.js +52 -0
- package/dist/cli/tui.js.map +1 -0
- package/dist/cli/ui.d.ts +53 -0
- package/dist/cli/ui.js +66 -0
- package/dist/cli/ui.js.map +1 -0
- package/dist/cli/update.d.ts +38 -0
- package/dist/cli/update.js +682 -0
- package/dist/cli/update.js.map +1 -0
- package/dist/cli/vercel.d.ts +20 -0
- package/dist/cli/vercel.js +193 -0
- package/dist/cli/vercel.js.map +1 -0
- package/dist/cli/verify-safety.d.ts +96 -0
- package/dist/cli/verify-safety.js +509 -0
- package/dist/cli/verify-safety.js.map +1 -0
- package/dist/cli/wire.d.ts +22 -0
- package/dist/cli/wire.js +205 -0
- package/dist/cli/wire.js.map +1 -0
- package/dist/core/classify.d.ts +51 -0
- package/dist/core/classify.js +450 -0
- package/dist/core/classify.js.map +1 -0
- package/dist/core/config.d.ts +63 -0
- package/dist/core/config.js +474 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/daemon/loop.d.ts +74 -0
- package/dist/core/daemon/loop.js +618 -0
- package/dist/core/daemon/loop.js.map +1 -0
- package/dist/core/daemon/state.d.ts +66 -0
- package/dist/core/daemon/state.js +197 -0
- package/dist/core/daemon/state.js.map +1 -0
- package/dist/core/dashboard.d.ts +40 -0
- package/dist/core/dashboard.js +463 -0
- package/dist/core/dashboard.js.map +1 -0
- package/dist/core/digest/build.d.ts +51 -0
- package/dist/core/digest/build.js +230 -0
- package/dist/core/digest/build.js.map +1 -0
- package/dist/core/digest/deliver.d.ts +47 -0
- package/dist/core/digest/deliver.js +230 -0
- package/dist/core/digest/deliver.js.map +1 -0
- package/dist/core/digest/store.d.ts +57 -0
- package/dist/core/digest/store.js +223 -0
- package/dist/core/digest/store.js.map +1 -0
- package/dist/core/doctor-fix.d.ts +21 -0
- package/dist/core/doctor-fix.js +440 -0
- package/dist/core/doctor-fix.js.map +1 -0
- package/dist/core/doctor.d.ts +18 -0
- package/dist/core/doctor.js +806 -0
- package/dist/core/doctor.js.map +1 -0
- package/dist/core/env-bridge.d.ts +64 -0
- package/dist/core/env-bridge.js +103 -0
- package/dist/core/env-bridge.js.map +1 -0
- package/dist/core/genome/capture.d.ts +49 -0
- package/dist/core/genome/capture.js +352 -0
- package/dist/core/genome/capture.js.map +1 -0
- package/dist/core/genome/consolidate.d.ts +38 -0
- package/dist/core/genome/consolidate.js +426 -0
- package/dist/core/genome/consolidate.js.map +1 -0
- package/dist/core/genome/export.d.ts +29 -0
- package/dist/core/genome/export.js +102 -0
- package/dist/core/genome/export.js.map +1 -0
- package/dist/core/genome/playbook.d.ts +33 -0
- package/dist/core/genome/playbook.js +320 -0
- package/dist/core/genome/playbook.js.map +1 -0
- package/dist/core/genome/recall.d.ts +45 -0
- package/dist/core/genome/recall.js +293 -0
- package/dist/core/genome/recall.js.map +1 -0
- package/dist/core/genome/store.d.ts +62 -0
- package/dist/core/genome/store.js +711 -0
- package/dist/core/genome/store.js.map +1 -0
- package/dist/core/git.d.ts +34 -0
- package/dist/core/git.js +115 -0
- package/dist/core/git.js.map +1 -0
- package/dist/core/goals/advance.d.ts +82 -0
- package/dist/core/goals/advance.js +263 -0
- package/dist/core/goals/advance.js.map +1 -0
- package/dist/core/goals/planner.d.ts +58 -0
- package/dist/core/goals/planner.js +233 -0
- package/dist/core/goals/planner.js.map +1 -0
- package/dist/core/goals/store.d.ts +128 -0
- package/dist/core/goals/store.js +442 -0
- package/dist/core/goals/store.js.map +1 -0
- package/dist/core/inbox/apply.d.ts +36 -0
- package/dist/core/inbox/apply.js +407 -0
- package/dist/core/inbox/apply.js.map +1 -0
- package/dist/core/inbox/notify-proposal.d.ts +13 -0
- package/dist/core/inbox/notify-proposal.js +21 -0
- package/dist/core/inbox/notify-proposal.js.map +1 -0
- package/dist/core/inbox/store.d.ts +67 -0
- package/dist/core/inbox/store.js +258 -0
- package/dist/core/inbox/store.js.map +1 -0
- package/dist/core/index-engine.d.ts +62 -0
- package/dist/core/index-engine.js +486 -0
- package/dist/core/index-engine.js.map +1 -0
- package/dist/core/integrations/desktop-notify.d.ts +18 -0
- package/dist/core/integrations/desktop-notify.js +42 -0
- package/dist/core/integrations/desktop-notify.js.map +1 -0
- package/dist/core/integrations/editors.d.ts +50 -0
- package/dist/core/integrations/editors.js +216 -0
- package/dist/core/integrations/editors.js.map +1 -0
- package/dist/core/integrations/github.d.ts +66 -0
- package/dist/core/integrations/github.js +332 -0
- package/dist/core/integrations/github.js.map +1 -0
- package/dist/core/integrations/identity.d.ts +29 -0
- package/dist/core/integrations/identity.js +359 -0
- package/dist/core/integrations/identity.js.map +1 -0
- package/dist/core/integrations/notify.d.ts +23 -0
- package/dist/core/integrations/notify.js +96 -0
- package/dist/core/integrations/notify.js.map +1 -0
- package/dist/core/integrations/vercel.d.ts +37 -0
- package/dist/core/integrations/vercel.js +192 -0
- package/dist/core/integrations/vercel.js.map +1 -0
- package/dist/core/knowledge/ask.d.ts +34 -0
- package/dist/core/knowledge/ask.js +325 -0
- package/dist/core/knowledge/ask.js.map +1 -0
- package/dist/core/knowledge/graph.d.ts +51 -0
- package/dist/core/knowledge/graph.js +564 -0
- package/dist/core/knowledge/graph.js.map +1 -0
- package/dist/core/knowledge/index.d.ts +74 -0
- package/dist/core/knowledge/index.js +586 -0
- package/dist/core/knowledge/index.js.map +1 -0
- package/dist/core/learn/playbooks.d.ts +84 -0
- package/dist/core/learn/playbooks.js +241 -0
- package/dist/core/learn/playbooks.js.map +1 -0
- package/dist/core/learn/reflect.d.ts +87 -0
- package/dist/core/learn/reflect.js +435 -0
- package/dist/core/learn/reflect.js.map +1 -0
- package/dist/core/learn/store.d.ts +51 -0
- package/dist/core/learn/store.js +165 -0
- package/dist/core/learn/store.js.map +1 -0
- package/dist/core/learn/tuning.d.ts +48 -0
- package/dist/core/learn/tuning.js +201 -0
- package/dist/core/learn/tuning.js.map +1 -0
- package/dist/core/lifecycle/scaffold.d.ts +43 -0
- package/dist/core/lifecycle/scaffold.js +260 -0
- package/dist/core/lifecycle/scaffold.js.map +1 -0
- package/dist/core/lifecycle/ship.d.ts +48 -0
- package/dist/core/lifecycle/ship.js +513 -0
- package/dist/core/lifecycle/ship.js.map +1 -0
- package/dist/core/lifecycle/templates.d.ts +20 -0
- package/dist/core/lifecycle/templates.js +605 -0
- package/dist/core/lifecycle/templates.js.map +1 -0
- package/dist/core/mcp-gateway.d.ts +59 -0
- package/dist/core/mcp-gateway.js +385 -0
- package/dist/core/mcp-gateway.js.map +1 -0
- package/dist/core/mcp-native.d.ts +53 -0
- package/dist/core/mcp-native.js +507 -0
- package/dist/core/mcp-native.js.map +1 -0
- package/dist/core/mcp-registry.d.ts +36 -0
- package/dist/core/mcp-registry.js +180 -0
- package/dist/core/mcp-registry.js.map +1 -0
- package/dist/core/observability/budget-alert.d.ts +18 -0
- package/dist/core/observability/budget-alert.js +90 -0
- package/dist/core/observability/budget-alert.js.map +1 -0
- package/dist/core/observability/estimate.d.ts +27 -0
- package/dist/core/observability/estimate.js +188 -0
- package/dist/core/observability/estimate.js.map +1 -0
- package/dist/core/observability/forecast.d.ts +19 -0
- package/dist/core/observability/forecast.js +101 -0
- package/dist/core/observability/forecast.js.map +1 -0
- package/dist/core/observability/governance.d.ts +28 -0
- package/dist/core/observability/governance.js +101 -0
- package/dist/core/observability/governance.js.map +1 -0
- package/dist/core/observability/otlp.d.ts +88 -0
- package/dist/core/observability/otlp.js +217 -0
- package/dist/core/observability/otlp.js.map +1 -0
- package/dist/core/observability/rollup.d.ts +35 -0
- package/dist/core/observability/rollup.js +311 -0
- package/dist/core/observability/rollup.js.map +1 -0
- package/dist/core/observability/telemetry-sink.d.ts +63 -0
- package/dist/core/observability/telemetry-sink.js +350 -0
- package/dist/core/observability/telemetry-sink.js.map +1 -0
- package/dist/core/observability/usage-source.d.ts +60 -0
- package/dist/core/observability/usage-source.js +347 -0
- package/dist/core/observability/usage-source.js.map +1 -0
- package/dist/core/onboard.d.ts +27 -0
- package/dist/core/onboard.js +288 -0
- package/dist/core/onboard.js.map +1 -0
- package/dist/core/orient.d.ts +23 -0
- package/dist/core/orient.js +135 -0
- package/dist/core/orient.js.map +1 -0
- package/dist/core/phantom.d.ts +23 -0
- package/dist/core/phantom.js +279 -0
- package/dist/core/phantom.js.map +1 -0
- package/dist/core/plugins/host-api.d.ts +29 -0
- package/dist/core/plugins/host-api.js +113 -0
- package/dist/core/plugins/host-api.js.map +1 -0
- package/dist/core/plugins/integrity.d.ts +36 -0
- package/dist/core/plugins/integrity.js +73 -0
- package/dist/core/plugins/integrity.js.map +1 -0
- package/dist/core/plugins/manifest.d.ts +31 -0
- package/dist/core/plugins/manifest.js +316 -0
- package/dist/core/plugins/manifest.js.map +1 -0
- package/dist/core/plugins/registry.d.ts +87 -0
- package/dist/core/plugins/registry.js +415 -0
- package/dist/core/plugins/registry.js.map +1 -0
- package/dist/core/plugins/types.d.ts +182 -0
- package/dist/core/plugins/types.js +40 -0
- package/dist/core/plugins/types.js.map +1 -0
- package/dist/core/plugins/wrappers.d.ts +40 -0
- package/dist/core/plugins/wrappers.js +229 -0
- package/dist/core/plugins/wrappers.js.map +1 -0
- package/dist/core/portfolio/backlog.d.ts +40 -0
- package/dist/core/portfolio/backlog.js +177 -0
- package/dist/core/portfolio/backlog.js.map +1 -0
- package/dist/core/portfolio/scanners.d.ts +21 -0
- package/dist/core/portfolio/scanners.js +600 -0
- package/dist/core/portfolio/scanners.js.map +1 -0
- package/dist/core/providers.d.ts +34 -0
- package/dist/core/providers.js +250 -0
- package/dist/core/providers.js.map +1 -0
- package/dist/core/quality/conventions.d.ts +35 -0
- package/dist/core/quality/conventions.js +267 -0
- package/dist/core/quality/conventions.js.map +1 -0
- package/dist/core/quality/fixes.d.ts +56 -0
- package/dist/core/quality/fixes.js +209 -0
- package/dist/core/quality/fixes.js.map +1 -0
- package/dist/core/quality/health.d.ts +69 -0
- package/dist/core/quality/health.js +350 -0
- package/dist/core/quality/health.js.map +1 -0
- package/dist/core/quality/store.d.ts +56 -0
- package/dist/core/quality/store.js +195 -0
- package/dist/core/quality/store.js.map +1 -0
- package/dist/core/readiness.d.ts +112 -0
- package/dist/core/readiness.js +431 -0
- package/dist/core/readiness.js.map +1 -0
- package/dist/core/run/agent-loop.d.ts +40 -0
- package/dist/core/run/agent-loop.js +291 -0
- package/dist/core/run/agent-loop.js.map +1 -0
- package/dist/core/run/budget.d.ts +47 -0
- package/dist/core/run/budget.js +113 -0
- package/dist/core/run/budget.js.map +1 -0
- package/dist/core/run/engines.d.ts +75 -0
- package/dist/core/run/engines.js +199 -0
- package/dist/core/run/engines.js.map +1 -0
- package/dist/core/run/model-manager.d.ts +64 -0
- package/dist/core/run/model-manager.js +339 -0
- package/dist/core/run/model-manager.js.map +1 -0
- package/dist/core/run/orchestrator.d.ts +100 -0
- package/dist/core/run/orchestrator.js +1515 -0
- package/dist/core/run/orchestrator.js.map +1 -0
- package/dist/core/run/provider-client.d.ts +46 -0
- package/dist/core/run/provider-client.js +796 -0
- package/dist/core/run/provider-client.js.map +1 -0
- package/dist/core/run/retry.d.ts +19 -0
- package/dist/core/run/retry.js +68 -0
- package/dist/core/run/retry.js.map +1 -0
- package/dist/core/run/router.d.ts +50 -0
- package/dist/core/run/router.js +257 -0
- package/dist/core/run/router.js.map +1 -0
- package/dist/core/run/self-heal.d.ts +52 -0
- package/dist/core/run/self-heal.js +181 -0
- package/dist/core/run/self-heal.js.map +1 -0
- package/dist/core/run/streaming.d.ts +31 -0
- package/dist/core/run/streaming.js +122 -0
- package/dist/core/run/streaming.js.map +1 -0
- package/dist/core/run/verify.d.ts +30 -0
- package/dist/core/run/verify.js +204 -0
- package/dist/core/run/verify.js.map +1 -0
- package/dist/core/sandbox/audit.d.ts +31 -0
- package/dist/core/sandbox/audit.js +169 -0
- package/dist/core/sandbox/audit.js.map +1 -0
- package/dist/core/sandbox/policy.d.ts +61 -0
- package/dist/core/sandbox/policy.js +211 -0
- package/dist/core/sandbox/policy.js.map +1 -0
- package/dist/core/sandbox/worktree.d.ts +175 -0
- package/dist/core/sandbox/worktree.js +673 -0
- package/dist/core/sandbox/worktree.js.map +1 -0
- package/dist/core/seams/backlog.d.ts +47 -0
- package/dist/core/seams/backlog.js +47 -0
- package/dist/core/seams/backlog.js.map +1 -0
- package/dist/core/seams/daemon-coordinator.d.ts +72 -0
- package/dist/core/seams/daemon-coordinator.js +76 -0
- package/dist/core/seams/daemon-coordinator.js.map +1 -0
- package/dist/core/seams/genome.d.ts +45 -0
- package/dist/core/seams/genome.js +53 -0
- package/dist/core/seams/genome.js.map +1 -0
- package/dist/core/seams/identity.d.ts +40 -0
- package/dist/core/seams/identity.js +44 -0
- package/dist/core/seams/identity.js.map +1 -0
- package/dist/core/seams/inbox.d.ts +60 -0
- package/dist/core/seams/inbox.js +66 -0
- package/dist/core/seams/inbox.js.map +1 -0
- package/dist/core/seams/index.d.ts +20 -0
- package/dist/core/seams/index.js +21 -0
- package/dist/core/seams/index.js.map +1 -0
- package/dist/core/seams/portfolio.d.ts +50 -0
- package/dist/core/seams/portfolio.js +61 -0
- package/dist/core/seams/portfolio.js.map +1 -0
- package/dist/core/seams/registry.d.ts +42 -0
- package/dist/core/seams/registry.js +128 -0
- package/dist/core/seams/registry.js.map +1 -0
- package/dist/core/seams/run-swarm.d.ts +66 -0
- package/dist/core/seams/run-swarm.js +74 -0
- package/dist/core/seams/run-swarm.js.map +1 -0
- package/dist/core/seams/types.d.ts +123 -0
- package/dist/core/seams/types.js +35 -0
- package/dist/core/seams/types.js.map +1 -0
- package/dist/core/spec/spec-store.d.ts +62 -0
- package/dist/core/spec/spec-store.js +359 -0
- package/dist/core/spec/spec-store.js.map +1 -0
- package/dist/core/swarm/gate.d.ts +45 -0
- package/dist/core/swarm/gate.js +114 -0
- package/dist/core/swarm/gate.js.map +1 -0
- package/dist/core/swarm/planner.d.ts +32 -0
- package/dist/core/swarm/planner.js +293 -0
- package/dist/core/swarm/planner.js.map +1 -0
- package/dist/core/swarm/rollback.d.ts +56 -0
- package/dist/core/swarm/rollback.js +266 -0
- package/dist/core/swarm/rollback.js.map +1 -0
- package/dist/core/swarm/runner.d.ts +62 -0
- package/dist/core/swarm/runner.js +1263 -0
- package/dist/core/swarm/runner.js.map +1 -0
- package/dist/core/swarm/sign.d.ts +71 -0
- package/dist/core/swarm/sign.js +362 -0
- package/dist/core/swarm/sign.js.map +1 -0
- package/dist/core/swarm/store.d.ts +52 -0
- package/dist/core/swarm/store.js +195 -0
- package/dist/core/swarm/store.js.map +1 -0
- package/dist/core/tidy.d.ts +32 -0
- package/dist/core/tidy.js +354 -0
- package/dist/core/tidy.js.map +1 -0
- package/dist/core/tools-registry.d.ts +16 -0
- package/dist/core/tools-registry.js +308 -0
- package/dist/core/tools-registry.js.map +1 -0
- package/dist/core/types.d.ts +2545 -0
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/web/api.d.ts +53 -0
- package/dist/core/web/api.js +698 -0
- package/dist/core/web/api.js.map +1 -0
- package/dist/core/web/public/app.js +1906 -0
- package/dist/core/web/public/index.html +721 -0
- package/dist/core/web/public/styles.css +2007 -0
- package/dist/core/web/server.d.ts +18 -0
- package/dist/core/web/server.js +122 -0
- package/dist/core/web/server.js.map +1 -0
- package/dist/core/web/static.d.ts +18 -0
- package/dist/core/web/static.js +122 -0
- package/dist/core/web/static.js.map +1 -0
- package/dist/tui/app.d.ts +33 -0
- package/dist/tui/app.js +350 -0
- package/dist/tui/app.js.map +1 -0
- package/dist/tui/render.d.ts +20 -0
- package/dist/tui/render.js +558 -0
- package/dist/tui/render.js.map +1 -0
- package/package.json +80 -0
- package/schema/config.schema.json +223 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-client.js","sourceRoot":"","sources":["../../../src/core/run/provider-client.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC;IAC9B,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,SAAS;IACT,OAAO;CACR,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAA2B;IACjD,SAAS,EAAE,mBAAmB;IAC9B,MAAM,EAAE,gBAAgB;IACxB,MAAM,EAAE,gBAAgB;IACxB,MAAM,EAAE,gBAAgB;IACxB,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,iBAAiB;IAC1B,KAAK,EAAE,sBAAsB;CAC9B,CAAC;AAEF,SAAS,eAAe,CAAC,EAAU;IACjC,OAAO,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC;AAED,8EAA8E;AAC9E,qDAAqD;AACrD,8EAA8E;AAC9E,8EAA8E;AAE9E,MAAM,2BAA2B,GAAG;IAClC,SAAS;IACT,UAAU;IACV,UAAU;IACV,UAAU;IACV,OAAO;IACP,WAAW;IACX,YAAY;IACZ,SAAS;IACT,cAAc;IACd,aAAa;IACb,OAAO;CACR,CAAC;AAEF,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;AACxE,CAAC;AAED;;;GAGG;AACH,SAAS,SAAS,CAAC,MAAgB,EAAE,QAAiB;IACpD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,QAAQ,EAAE,IAAI,EAAE,IAAI,SAAS,CAAC;IAC9D,4EAA4E;IAC5E,8EAA8E;IAC9E,gFAAgF;IAChF,2EAA2E;IAC3E,4EAA4E;IAC5E,qDAAqD;IACrD,MAAM,QAAQ,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,IAAI,SAAS,CAAC;IACpF,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,CACL,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,QAAQ,CAAC;YAClC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;YACpE,QAAQ,CACT,CAAC;IACJ,CAAC;IACD,gGAAgG;IAChG,4FAA4F;IAC5F,0DAA0D;IAC1D,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC;IACrD,MAAM,MAAM,GAAG,CAAC,CAAS,EAAU,EAAE;QACnC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,sBAAsB;QACnE,IAAI,CAAC;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC,yBAAyB;QAC5E,OAAO,GAAG,CAAC,CAAC,+BAA+B;IAC7C,CAAC,CAAC;IACF,MAAM,KAAK,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnF,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;AACnB,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,2BAA2B;AAE5D,KAAK,UAAU,gBAAgB,CAC7B,GAAW,EACX,IAAiB,EACjB,SAAS,GAAG,gBAAgB;IAE5B,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAC;IAC9D,IAAI,CAAC;QACH,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;IAClE,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;AACH,CAAC;AAED;;;;;;;;;GASG;AACH,KAAK,UAAU,WAAW,CACxB,GAAW,EACX,IAAiB,EACjB,gBAAwB;IAExB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACrE,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,MAAM,iBAAiB,GAAG,GAAG,EAAE;QAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;QACtB,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1E,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,iBAAiB,EAAE,CAAC;IACrD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,iBAAiB,EAAE,CAAC;QACpB,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,KAAK,UAAU,mBAAmB,CAChC,MAA+C,EAC/C,UAA2B,EAC3B,MAAc;IAEd,IAAI,KAAgD,CAAC;IACrD,MAAM,IAAI,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;QAC5C,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YACtB,UAAU,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,IAAI,KAAK,CAAC,6BAA6B,MAAM,IAAI,CAAC,CAAC,CAAC;QAC7D,CAAC,EAAE,MAAM,CAAC,CAAC;IACb,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;YAAS,CAAC;QACT,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;GAGG;AACH,SAAS,oBAAoB,CAC3B,OAAgC;IAEhC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAExE,MAAM,MAAM,GAAuD,EAAE,CAAC;IACtE,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI;YAAE,SAAS;QACpD,MAAM,IAAI,GAAG,EAA6B,CAAC;QAC3C,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAwC,CAAC;QACnE,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QACrE,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACnC,8DAA8D;QAC9D,MAAM,EAAE,GAAG,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CACvB,QAAuB;IAEvB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO;gBACL,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,YAAY,EAAE,CAAC,CAAC,UAAU;gBAC1B,IAAI,EAAE,CAAC,CAAC,IAAI;aACb,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,MAAM,iBAAiB,GAAG,MAAM,CAAC,CAAC,6BAA6B;AAE/D,SAAS,iBAAiB,CACxB,OAAe,EACf,KAAa,EACb,aAAsB;IAEtB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC;IAE1D,OAAO;QACL,EAAE,EAAE,QAAQ;QACZ,aAAa;QAEb,KAAK,CAAC,IAAI,CAAC,QAAuB,EAAE,KAAiB;YACnD,yCAAyC;YACzC,uDAAuD;YACvD,MAAM,cAAc,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAElD,MAAM,IAAI,GAA4B;gBACpC,KAAK;gBACL,QAAQ,EAAE,cAAc;gBACxB,MAAM,EAAE,KAAK;aACd,CAAC;YAEF,sDAAsD;YACtD,IAAI,aAAa,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YACxB,CAAC;YAED,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE;oBACzC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;iBAC3B,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;YACjD,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,eAAe,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;YAChE,CAAC;YAED,IAAI,IAAa,CAAC;YAClB,IAAI,CAAC;gBACH,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAY,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,CAAC,GAAG,IAA+B,CAAC;YAC1C,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAA4B,CAAC;YAChE,MAAM,OAAO,GACX,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAEnE,4BAA4B;YAC5B,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,mBAAmB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3F,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAE5E,MAAM,QAAQ,GACZ,UAAU,GAAG,CAAC;gBACZ,CAAC,CAAC,UAAU;gBACZ,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAEtE,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAEhD,OAAO;gBACL,OAAO;gBACP,SAAS;gBACT,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE;aAC/B,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,UAAU,CACd,QAAuB,EACvB,KAA4B,EAC5B,OAA4B;YAE5B,uDAAuD;YACvD,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBAElD,MAAM,IAAI,GAA4B;oBACpC,KAAK;oBACL,QAAQ,EAAE,cAAc;oBACxB,MAAM,EAAE,IAAI;iBACb,CAAC;gBAEF,IAAI,aAAa,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;gBACxB,CAAC;gBAED,IAAI,QAAkB,CAAC;gBACvB,IAAI,gBAAiC,CAAC;gBACtC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,OAAO,EACP;wBACE,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;wBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;qBAC3B,EACD,iBAAiB,CAClB,CAAC;oBACF,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;oBAC3B,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC;oBACrC,uEAAuE;oBACvE,oEAAoE;oBACpE,2BAA2B;oBAC3B,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAC7B,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC7D,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,EAAE,CAAC,CAAC;gBACxD,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBACtD,MAAM,IAAI,KAAK,CAAC,sBAAsB,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;gBACvE,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;gBACxD,CAAC;gBAED,qDAAqD;gBACrD,wEAAwE;gBACxE,iCAAiC;gBACjC,IAAI,UAAU,GAAG,EAAE,CAAC;gBACpB,IAAI,YAAY,GAA4B,EAAE,CAAC;gBAC/C,IAAI,QAAQ,GAAG,CAAC,CAAC;gBACjB,IAAI,SAAS,GAAG,CAAC,CAAC;gBAElB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;gBAClC,IAAI,UAAU,GAAG,EAAE,CAAC;gBAEpB,IAAI,CAAC;oBACH,OAAO,IAAI,EAAE,CAAC;wBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,mBAAmB,CAC/C,MAAM,EACN,gBAAgB,EAChB,iBAAiB,CAClB,CAAC;wBACF,IAAI,IAAI;4BAAE,MAAM;wBAEhB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;wBAEtD,iDAAiD;wBACjD,IAAI,KAAa,CAAC;wBAClB,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;4BACjD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;4BAC/C,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;4BAEzC,IAAI,CAAC,IAAI;gCAAE,SAAS;4BAEpB,IAAI,KAA8B,CAAC;4BACnC,IAAI,CAAC;gCACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;4BACtD,CAAC;4BAAC,MAAM,CAAC;gCACP,uBAAuB;gCACvB,SAAS;4BACX,CAAC;4BAED,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAA4B,CAAC;4BACrE,MAAM,KAAK,GACT,OAAO,QAAQ,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4BAErE,IAAI,KAAK,EAAE,CAAC;gCACV,UAAU,IAAI,KAAK,CAAC;gCACpB,OAAO,CAAC,KAAK,CAAC,CAAC;4BACjB,CAAC;4BAED,6DAA6D;4BAC7D,+CAA+C;4BAC/C,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;gCAC3B,YAAY,GAAG,QAAQ,CAAC;gCAExB,MAAM,UAAU,GACd,OAAO,KAAK,CAAC,mBAAmB,CAAC,KAAK,QAAQ;oCAC5C,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC;oCAC5B,CAAC,CAAC,CAAC,CAAC;gCACR,MAAM,SAAS,GACb,OAAO,KAAK,CAAC,YAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gCAEpE,QAAQ;oCACN,UAAU,GAAG,CAAC;wCACZ,CAAC,CAAC,UAAU;wCACZ,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gCAC/D,SAAS,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;4BACrE,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,CAAC;gBAED,6CAA6C;gBAC7C,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACnB,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;oBACpB,SAAS,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;gBACzC,CAAC;gBAED,MAAM,SAAS,GAAG,oBAAoB,CAAC,YAAY,CAAC,CAAC;gBAErD,OAAO;oBACL,OAAO,EAAE,UAAU;oBACnB,SAAS;oBACT,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE;iBAC/B,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,8EAA8E;gBAC9E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAChD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,mCAAmC;AACnC,8EAA8E;AAE9E;;GAEG;AACH,SAAS,oBAAoB,CAC3B,OAAgC;IAEhC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAExE,MAAM,MAAM,GAAuD,EAAE,CAAC;IACtE,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;QAC1B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI;YAAE,SAAS;QACpD,MAAM,IAAI,GAAG,EAA6B,CAAC;QAC3C,MAAM,EAAE,GAAG,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,MAAM,CAAC,MAAM,EAAE,CAAC;QACjF,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAwC,CAAC;QACnE,IAAI,CAAC,EAAE;YAAE,SAAS;QAClB,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAErE,IAAI,IAAI,GAAY,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QAC1C,4CAA4C;QAC5C,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACP,gCAAgC;YAClC,CAAC;QACH,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,SAAS,gBAAgB,CACvB,QAAuB;IAEvB,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACxB,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACtB,OAAO;gBACL,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE,CAAC,CAAC,OAAO;gBAClB,YAAY,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE;gBAChC,IAAI,EAAE,CAAC,CAAC,IAAI;aACb,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,mBAAmB,CAC1B,OAAe,EACf,KAAa,EACb,aAAsB;IAEtB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,sBAAsB,CAAC;IAErE,OAAO;QACL,EAAE,EAAE,UAAU;QACd,aAAa;QAEb,KAAK,CAAC,IAAI,CAAC,QAAuB,EAAE,KAAiB;YACnD,wCAAwC;YACxC,MAAM,cAAc,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAElD,MAAM,IAAI,GAA4B;gBACpC,KAAK;gBACL,QAAQ,EAAE,cAAc;gBACxB,MAAM,EAAE,KAAK;aACd,CAAC;YAEF,IAAI,aAAa,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;gBACtB,IAAI,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC;YAC/B,CAAC;YAED,IAAI,QAAkB,CAAC;YACvB,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,gBAAgB,CAAC,OAAO,EAAE;oBACzC,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;oBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;iBAC3B,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,GAAY,EAAE,CAAC;gBACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,EAAE,CAAC,CAAC;YACpD,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,kBAAkB,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;YACnE,CAAC;YAED,IAAI,IAAa,CAAC;YAClB,IAAI,CAAC;gBACH,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAY,CAAC;YAC5C,CAAC;YAAC,MAAM,CAAC;gBACP,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC1D,CAAC;YAED,MAAM,CAAC,GAAG,IAA+B,CAAC;YAC1C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC;YAClE,MAAM,OAAO,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,CAA4B,CAAC;YAC1E,MAAM,OAAO,GACX,OAAO,OAAO,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAEnE,cAAc;YACd,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAA4B,CAAC;YAC/D,MAAM,YAAY,GAChB,OAAO,QAAQ,CAAC,eAAe,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAChF,MAAM,gBAAgB,GACpB,OAAO,QAAQ,CAAC,mBAAmB,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAExF,MAAM,QAAQ,GACZ,YAAY,GAAG,CAAC;gBACd,CAAC,CAAC,YAAY;gBACd,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,MAAM,SAAS,GACb,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;YAEpE,MAAM,SAAS,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;YAEhD,OAAO;gBACL,OAAO;gBACP,SAAS;gBACT,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE;aAC/B,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,UAAU,CACd,QAAuB,EACvB,KAA4B,EAC5B,OAA4B;YAE5B,2DAA2D;YAC3D,IAAI,CAAC;gBACH,MAAM,cAAc,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBAElD,MAAM,IAAI,GAA4B;oBACpC,KAAK;oBACL,QAAQ,EAAE,cAAc;oBACxB,MAAM,EAAE,IAAI;iBACb,CAAC;gBAEF,IAAI,aAAa,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC/C,IAAI,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;oBACtB,IAAI,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC;gBAC/B,CAAC;gBAED,IAAI,QAAkB,CAAC;gBACvB,IAAI,gBAAiC,CAAC;gBACtC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,WAAW,CAC9B,OAAO,EACP;wBACE,MAAM,EAAE,MAAM;wBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;wBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;qBAC3B,EACD,iBAAiB,CAClB,CAAC;oBACF,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;oBAC3B,gBAAgB,GAAG,MAAM,CAAC,UAAU,CAAC;oBACrC,uEAAuE;oBACvE,oEAAoE;oBACpE,2BAA2B;oBAC3B,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBAC7B,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACtB,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC7D,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,EAAE,CAAC,CAAC;gBAC3D,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACjB,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;oBACtD,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC,CAAC;gBAC1E,CAAC;gBAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACnB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;gBAC3D,CAAC;gBAED,+DAA+D;gBAC/D,uEAAuE;gBACvE,qEAAqE;gBACrE,IAAI,UAAU,GAAG,EAAE,CAAC;gBACpB,gFAAgF;gBAChF,MAAM,iBAAiB,GAGnB,EAAE,CAAC;gBACP,IAAI,QAAQ,GAAG,CAAC,CAAC;gBACjB,IAAI,SAAS,GAAG,CAAC,CAAC;gBAElB,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACzC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;gBAClC,IAAI,UAAU,GAAG,EAAE,CAAC;gBAEpB,IAAI,CAAC;oBACH,OAAO,IAAI,EAAE,CAAC;wBACZ,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,mBAAmB,CAC/C,MAAM,EACN,gBAAgB,EAChB,iBAAiB,CAClB,CAAC;wBACF,IAAI,IAAI;4BAAE,MAAM;wBAEhB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;wBAEtD,IAAI,KAAa,CAAC;wBAClB,OAAO,CAAC,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;4BACjD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;4BAC9C,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;4BAEzC,mEAAmE;4BACnE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;gCAAE,SAAS;4BAEvC,MAAM,OAAO,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,uBAAuB;4BAC5D,IAAI,OAAO,KAAK,QAAQ;gCAAE,SAAS;4BAEnC,IAAI,KAA8B,CAAC;4BACnC,IAAI,CAAC;gCACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAA4B,CAAC;4BACzD,CAAC;4BAAC,MAAM,CAAC;gCACP,SAAS;4BACX,CAAC;4BAED,sEAAsE;4BACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAwC,CAAC;4BACvE,IAAI,QAAQ,EAAE,CAAC;gCACb,MAAM,EAAE,GACN,OAAO,QAAQ,CAAC,eAAe,CAAC,KAAK,QAAQ;oCAC3C,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;oCAC3B,CAAC,CAAC,CAAC,CAAC;gCACR,MAAM,EAAE,GACN,OAAO,QAAQ,CAAC,mBAAmB,CAAC,KAAK,QAAQ;oCAC/C,CAAC,CAAC,QAAQ,CAAC,mBAAmB,CAAC;oCAC/B,CAAC,CAAC,CAAC,CAAC;gCACR,IAAI,EAAE,GAAG,CAAC;oCAAE,QAAQ,GAAG,EAAE,CAAC;gCAC1B,IAAI,EAAE,GAAG,CAAC;oCAAE,SAAS,GAAG,EAAE,CAAC;4BAC7B,CAAC;4BAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4BACxE,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAA4B,CAAC;4BAClE,MAAM,KAAK,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,CAA4B,CAAC;4BAEtE,2BAA2B;4BAC3B,MAAM,YAAY,GAChB,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC/D,IAAI,YAAY,EAAE,CAAC;gCACjB,UAAU,IAAI,YAAY,CAAC;gCAC3B,OAAO,CAAC,YAAY,CAAC,CAAC;4BACxB,CAAC;4BAED,8EAA8E;4BAC9E,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;gCACvC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,YAAY,CAAc,EAAE,CAAC;oCAClD,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,KAAK,IAAI;wCAAE,SAAS;oCACpD,MAAM,CAAC,GAAG,EAA6B,CAAC;oCACxC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oCAC5D,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC;wCAC5B,iBAAiB,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;oCAC7D,CAAC;oCACD,IAAI,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;wCAChC,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;oCACtC,CAAC;oCACD,MAAM,EAAE,GAAG,CAAC,CAAC,UAAU,CAAwC,CAAC;oCAChE,IAAI,EAAE,EAAE,CAAC;wCACP,IAAI,OAAO,EAAE,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE,CAAC;4CACnC,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;wCAC5C,CAAC;wCACD,IAAI,OAAO,EAAE,CAAC,WAAW,CAAC,KAAK,QAAQ,EAAE,CAAC;4CACxC,iBAAiB,CAAC,GAAG,CAAC,CAAC,OAAO,IAAI,EAAE,CAAC,WAAW,CAAC,CAAC;wCACpD,CAAC;oCACH,CAAC;gCACH,CAAC;4BACH,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;wBAAS,CAAC;oBACT,MAAM,CAAC,WAAW,EAAE,CAAC;gBACvB,CAAC;gBAED,wDAAwD;gBACxD,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;oBACnB,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACtE,CAAC;gBACD,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;oBACpB,SAAS,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;gBACzC,CAAC;gBAED,oDAAoD;gBACpD,MAAM,SAAS,GACb,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,MAAM,GAAG,CAAC;oBACvC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;wBACjD,IAAI,IAAI,GAAY,IAAI,CAAC,OAAO,CAAC;wBACjC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;4BACjB,IAAI,CAAC;gCACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAY,CAAC;4BAC7C,CAAC;4BAAC,MAAM,CAAC;gCACP,oCAAoC;4BACtC,CAAC;wBACH,CAAC;wBACD,OAAO;4BACL,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;4BAC5D,IAAI,EAAE,IAAI,CAAC,IAAI;4BACf,SAAS,EAAE,IAAI;yBAChB,CAAC;oBACJ,CAAC,CAAC;oBACJ,CAAC,CAAC,SAAS,CAAC;gBAEhB,OAAO;oBACL,OAAO,EAAE,UAAU;oBACnB,SAAS;oBACT,KAAK,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE;iBAC/B,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,8EAA8E;gBAC9E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAChD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;oBACnB,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;gBACD,OAAO,MAAM,CAAC;YAChB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,GAAgB,EAChB,IAAgE;IAEhE,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAChD,4EAA4E;IAC5E,6EAA6E;IAC7E,yEAAyE;IACzE,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,cAAc,CAAC;IAE1D,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,kHAAkH,CACnH,CAAC;IACJ,CAAC;IAED,iCAAiC;IACjC,IAAI,eAAe,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,kEAAkE,QAAQ,aAAa;gBACrF,+BAA+B,CAClC,CAAC;QACJ,CAAC;QACD,qDAAqD;QACrD,MAAM,MAAM,GAAG,kBAAkB,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;QAC1D,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAChC,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CACb,yCAAyC,MAAM,eAAe;oBAC5D,wBAAwB,QAAQ,cAAc,CACjD,CAAC;YACJ,CAAC;QACH,CAAC;QACD,oFAAoF;QACpF,wEAAwE;QACxE,MAAM,IAAI,KAAK,CACb,gCAAgC,QAAQ,sCAAsC;YAC5E,wDAAwD;YACxD,oDAAoD,CACvD,CAAC;IACJ,CAAC;IAED,mCAAmC;IACnC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QACnE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,mFAAmF,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI;gBACtG,4CAA4C,CAC/C,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC;QAChD,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAEtD,OAAO,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IAC1D,CAAC;IAED,sCAAsC;IACtC,IAAI,QAAQ,KAAK,UAAU,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QACrE,IAAI,CAAC,QAAQ,EAAE,EAAE,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CACb,sFAAsF,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI;gBAC3G,4DAA4D,CAC/D,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACrD,8EAA8E;QAC9E,MAAM,aAAa,GAAG,IAAI,CAAC;QAC3B,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAExD,OAAO,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;IAC5D,CAAC;IAED,6CAA6C;IAC7C,wEAAwE;IACxE,2EAA2E;IAC3E,uEAAuE;IACvE,sEAAsE;IACtE,IAAI,CAAC;QACH,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;QACtE,MAAM,eAAe,GAAG,MAAM,kBAAkB,CAAC,GAAG,CAAC,CAAC;QACtD,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC;QAC5D,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBAC1B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;oBACrB,MAAM,IAAI,KAAK,CACb,0BAA0B,QAAQ,kEAAkE,CACrG,CAAC;gBACJ,CAAC;gBACD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC;oBACxC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBAChC,MAAM,IAAI,KAAK,CACb,yCAAyC,MAAM,oCAAoC,QAAQ,IAAI,CAChG,CAAC;oBACJ,CAAC;gBACH,CAAC;YACH,CAAC;YACD,MAAM,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAmB,CAAC;YAClF,0EAA0E;YAC1E,kCAAkC;YAClC,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,QAAQ,EAAE,CAAC;gBAClF,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,iDAAiD,CAAC,CAAC;YACjG,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,yEAAyE;QACzE,qDAAqD;QACrD,IAAI,GAAG,YAAY,KAAK,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAC;YAAE,MAAM,GAAG,CAAC;IACrF,CAAC;IAED,mCAAmC;IACnC,MAAM,IAAI,KAAK,CACb,kCAAkC,QAAQ,2EAA2E,CACtH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded exponential-backoff retry for `ashlr run`.
|
|
3
|
+
*
|
|
4
|
+
* Fully deterministic — no jitter, no nondeterminism.
|
|
5
|
+
* Bounded by construction: never loops more than policy.maxAttempts times.
|
|
6
|
+
* No runtime deps beyond Node built-ins.
|
|
7
|
+
*/
|
|
8
|
+
import type { RetryPolicy } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Run `fn` with bounded exponential backoff.
|
|
11
|
+
*
|
|
12
|
+
* - `fn` receives the 1-based attempt number (1, 2, ..., maxAttempts).
|
|
13
|
+
* - Retries ONLY while `isRetryable(err)` is true AND attempts < policy.maxAttempts.
|
|
14
|
+
* - Backoff delay before retry N+1 = policy.baseDelayMs * 2^(N-1), capped at 30 s.
|
|
15
|
+
* (attempt 1 failure → 0 ms delay before attempt 2 when baseDelayMs is 0, else baseDelayMs).
|
|
16
|
+
* - Rethrows the last error when attempts are exhausted or the error is non-retryable.
|
|
17
|
+
* - Bounded by construction: NEVER loops more than policy.maxAttempts times.
|
|
18
|
+
*/
|
|
19
|
+
export declare function withRetry<T>(fn: (attempt: number) => Promise<T>, policy: RetryPolicy, isRetryable: (e: unknown) => boolean): Promise<T>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded exponential-backoff retry for `ashlr run`.
|
|
3
|
+
*
|
|
4
|
+
* Fully deterministic — no jitter, no nondeterminism.
|
|
5
|
+
* Bounded by construction: never loops more than policy.maxAttempts times.
|
|
6
|
+
* No runtime deps beyond Node built-ins.
|
|
7
|
+
*/
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
// Internal helpers
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
/** Maximum backoff cap in ms — prevents degenerate waits on high maxAttempts. */
|
|
12
|
+
const MAX_DELAY_MS = 30_000;
|
|
13
|
+
/**
|
|
14
|
+
* Compute backoff delay for a completed attempt (1-based).
|
|
15
|
+
* delay = min(baseDelayMs * 2^(attempt - 1), MAX_DELAY_MS)
|
|
16
|
+
* attempt=1 → 0 delay (first retry fires immediately after first failure).
|
|
17
|
+
*
|
|
18
|
+
* We define attempt=1 as the first try; the delay before retry attempt N+1
|
|
19
|
+
* is `baseDelayMs * 2^(N-1)` where N is the just-failed attempt number.
|
|
20
|
+
*/
|
|
21
|
+
function backoffMs(policy, failedAttempt) {
|
|
22
|
+
// failedAttempt is 1-based. Exponent: 0 on first failure (immediate retry).
|
|
23
|
+
const exponent = failedAttempt - 1;
|
|
24
|
+
const raw = policy.baseDelayMs * Math.pow(2, exponent);
|
|
25
|
+
return Math.min(raw, MAX_DELAY_MS);
|
|
26
|
+
}
|
|
27
|
+
/** Sleep without side effects. Await-able, resolves after `ms` milliseconds. */
|
|
28
|
+
function sleep(ms) {
|
|
29
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
30
|
+
}
|
|
31
|
+
// ---------------------------------------------------------------------------
|
|
32
|
+
// Public API
|
|
33
|
+
// ---------------------------------------------------------------------------
|
|
34
|
+
/**
|
|
35
|
+
* Run `fn` with bounded exponential backoff.
|
|
36
|
+
*
|
|
37
|
+
* - `fn` receives the 1-based attempt number (1, 2, ..., maxAttempts).
|
|
38
|
+
* - Retries ONLY while `isRetryable(err)` is true AND attempts < policy.maxAttempts.
|
|
39
|
+
* - Backoff delay before retry N+1 = policy.baseDelayMs * 2^(N-1), capped at 30 s.
|
|
40
|
+
* (attempt 1 failure → 0 ms delay before attempt 2 when baseDelayMs is 0, else baseDelayMs).
|
|
41
|
+
* - Rethrows the last error when attempts are exhausted or the error is non-retryable.
|
|
42
|
+
* - Bounded by construction: NEVER loops more than policy.maxAttempts times.
|
|
43
|
+
*/
|
|
44
|
+
export async function withRetry(fn, policy, isRetryable) {
|
|
45
|
+
const maxAttempts = Math.max(1, policy.maxAttempts);
|
|
46
|
+
let lastError;
|
|
47
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
48
|
+
try {
|
|
49
|
+
return await fn(attempt);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
lastError = err;
|
|
53
|
+
const isLast = attempt === maxAttempts;
|
|
54
|
+
if (isLast || !isRetryable(err)) {
|
|
55
|
+
// Either exhausted all attempts or this error is non-retryable — give up.
|
|
56
|
+
throw lastError;
|
|
57
|
+
}
|
|
58
|
+
// Wait before the next attempt.
|
|
59
|
+
const delay = backoffMs(policy, attempt);
|
|
60
|
+
if (delay > 0) {
|
|
61
|
+
await sleep(delay);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Unreachable (loop always throws or returns), but satisfies TypeScript.
|
|
66
|
+
throw lastError;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../../../src/core/run/retry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,iFAAiF;AACjF,MAAM,YAAY,GAAG,MAAM,CAAC;AAE5B;;;;;;;GAOG;AACH,SAAS,SAAS,CAAC,MAAmB,EAAE,aAAqB;IAC3D,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,aAAa,GAAG,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;AACrC,CAAC;AAED,gFAAgF;AAChF,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAmC,EACnC,MAAmB,EACnB,WAAoC;IAEpC,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IACpD,IAAI,SAAkB,CAAC;IAEvB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,EAAE,EAAE,CAAC;QACxD,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,SAAS,GAAG,GAAG,CAAC;YAEhB,MAAM,MAAM,GAAG,OAAO,KAAK,WAAW,CAAC;YACvC,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,0EAA0E;gBAC1E,MAAM,SAAS,CAAC;YAClB,CAAC;YAED,gCAAgC;YAChC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACzC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,MAAM,SAAS,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* router.ts — per-task model router (M15).
|
|
3
|
+
*
|
|
4
|
+
* LOCAL-FIRST, NO SILENT CLOUD:
|
|
5
|
+
* - Default path is always LOCAL (Ollama / LM Studio).
|
|
6
|
+
* - A CLOUD RouteDecision is returned ONLY when ALL three gates hold:
|
|
7
|
+
* 1. opts.allowCloud === true
|
|
8
|
+
* 2. opts.lastReason !== 'none' (a real escalation trigger)
|
|
9
|
+
* 3. cloudKeyAvailable(<cloud provider>) === true
|
|
10
|
+
* - If any gate fails the router returns the best available LOCAL route.
|
|
11
|
+
*
|
|
12
|
+
* Never throws — on any error returns a safe local fallback RouteDecision.
|
|
13
|
+
* No auto-download. No side-effects.
|
|
14
|
+
*/
|
|
15
|
+
import type { AshlrConfig, EscalationReason, RouteDecision } from '../types.js';
|
|
16
|
+
/**
|
|
17
|
+
* Returns true iff the conventional API-key env var for `provider` is present
|
|
18
|
+
* and non-empty. Detection only — the value is NEVER read, returned, or logged.
|
|
19
|
+
*/
|
|
20
|
+
export declare function cloudKeyAvailable(provider: string): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Estimate the USD cost that `tokensIn`/`tokensOut` would have incurred on a
|
|
23
|
+
* representative cloud provider (Anthropic mid-tier). This is an ESTIMATE only,
|
|
24
|
+
* used for the "would-have-been-cloud" savings display — never used for billing.
|
|
25
|
+
*
|
|
26
|
+
* Reuses budget.ts `estCostUsd` with provider='anthropic'.
|
|
27
|
+
*/
|
|
28
|
+
export declare function wouldBeCloudCost(tokensIn: number, tokensOut: number): number;
|
|
29
|
+
/**
|
|
30
|
+
* Choose the provider + model for a single task attempt.
|
|
31
|
+
*
|
|
32
|
+
* LOCAL-FIRST: the default return is always a local RouteDecision (tier
|
|
33
|
+
* 'local'). A cloud route is returned ONLY when ALL three gates hold:
|
|
34
|
+
* - opts.allowCloud === true
|
|
35
|
+
* - opts.lastReason !== 'none'
|
|
36
|
+
* - cloudKeyAvailable(<cloud provider from chain>) === true
|
|
37
|
+
*
|
|
38
|
+
* Routing-rule application (cfg.models.routing):
|
|
39
|
+
* The first rule whose `match` string appears (case-insensitive substring)
|
|
40
|
+
* in taskGoal wins and sets the preferred model. The preferred model is
|
|
41
|
+
* applied to whichever LOCAL provider is active; it does NOT force a cloud
|
|
42
|
+
* provider on its own.
|
|
43
|
+
*
|
|
44
|
+
* Never throws — returns a safe 'local-fallback' RouteDecision on any error.
|
|
45
|
+
*/
|
|
46
|
+
export declare function chooseRoute(taskGoal: string, cfg: AshlrConfig, opts: {
|
|
47
|
+
allowCloud: boolean;
|
|
48
|
+
attempt: number;
|
|
49
|
+
lastReason: EscalationReason;
|
|
50
|
+
}): Promise<RouteDecision>;
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* router.ts — per-task model router (M15).
|
|
3
|
+
*
|
|
4
|
+
* LOCAL-FIRST, NO SILENT CLOUD:
|
|
5
|
+
* - Default path is always LOCAL (Ollama / LM Studio).
|
|
6
|
+
* - A CLOUD RouteDecision is returned ONLY when ALL three gates hold:
|
|
7
|
+
* 1. opts.allowCloud === true
|
|
8
|
+
* 2. opts.lastReason !== 'none' (a real escalation trigger)
|
|
9
|
+
* 3. cloudKeyAvailable(<cloud provider>) === true
|
|
10
|
+
* - If any gate fails the router returns the best available LOCAL route.
|
|
11
|
+
*
|
|
12
|
+
* Never throws — on any error returns a safe local fallback RouteDecision.
|
|
13
|
+
* No auto-download. No side-effects.
|
|
14
|
+
*/
|
|
15
|
+
import { getProviderRegistry } from '../providers.js';
|
|
16
|
+
import { estCostUsd } from './budget.js';
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
// Cloud provider env-key map — detection only, values are NEVER read/logged.
|
|
19
|
+
// ---------------------------------------------------------------------------
|
|
20
|
+
const CLOUD_PROVIDER_ENV = {
|
|
21
|
+
anthropic: 'ANTHROPIC_API_KEY',
|
|
22
|
+
openai: 'OPENAI_API_KEY',
|
|
23
|
+
gemini: 'GEMINI_API_KEY',
|
|
24
|
+
cohere: 'COHERE_API_KEY',
|
|
25
|
+
groq: 'GROQ_API_KEY',
|
|
26
|
+
mistral: 'MISTRAL_API_KEY',
|
|
27
|
+
azure: 'AZURE_OPENAI_API_KEY',
|
|
28
|
+
};
|
|
29
|
+
/** Known local (zero-cost) provider ids. */
|
|
30
|
+
const LOCAL_PROVIDERS = new Set(['ollama', 'lmstudio']);
|
|
31
|
+
/**
|
|
32
|
+
* Returns true iff `provider` is a known cloud provider
|
|
33
|
+
* (i.e. not a local provider).
|
|
34
|
+
*/
|
|
35
|
+
function isCloudProvider(id) {
|
|
36
|
+
return !LOCAL_PROVIDERS.has(id.toLowerCase());
|
|
37
|
+
}
|
|
38
|
+
// ---------------------------------------------------------------------------
|
|
39
|
+
// Public: cloudKeyAvailable
|
|
40
|
+
// ---------------------------------------------------------------------------
|
|
41
|
+
/**
|
|
42
|
+
* Returns true iff the conventional API-key env var for `provider` is present
|
|
43
|
+
* and non-empty. Detection only — the value is NEVER read, returned, or logged.
|
|
44
|
+
*/
|
|
45
|
+
export function cloudKeyAvailable(provider) {
|
|
46
|
+
const envVar = CLOUD_PROVIDER_ENV[provider.toLowerCase()];
|
|
47
|
+
if (!envVar)
|
|
48
|
+
return false;
|
|
49
|
+
const val = process.env[envVar];
|
|
50
|
+
return typeof val === 'string' && val.trim().length > 0;
|
|
51
|
+
}
|
|
52
|
+
// ---------------------------------------------------------------------------
|
|
53
|
+
// Public: wouldBeCloudCost
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
/**
|
|
56
|
+
* Estimate the USD cost that `tokensIn`/`tokensOut` would have incurred on a
|
|
57
|
+
* representative cloud provider (Anthropic mid-tier). This is an ESTIMATE only,
|
|
58
|
+
* used for the "would-have-been-cloud" savings display — never used for billing.
|
|
59
|
+
*
|
|
60
|
+
* Reuses budget.ts `estCostUsd` with provider='anthropic'.
|
|
61
|
+
*/
|
|
62
|
+
export function wouldBeCloudCost(tokensIn, tokensOut) {
|
|
63
|
+
return estCostUsd('anthropic', tokensIn, tokensOut);
|
|
64
|
+
}
|
|
65
|
+
// ---------------------------------------------------------------------------
|
|
66
|
+
// Internal helpers
|
|
67
|
+
// ---------------------------------------------------------------------------
|
|
68
|
+
/**
|
|
69
|
+
* Pick the best local model from a list of available model names.
|
|
70
|
+
* Mirrors the heuristic in provider-client.ts (small/fast preferred; skip
|
|
71
|
+
* embedding-only models; slight bias for coder models).
|
|
72
|
+
* Returns 'default' for an empty list (safe fallback).
|
|
73
|
+
*/
|
|
74
|
+
function pickBestLocalModel(models) {
|
|
75
|
+
if (models.length === 0)
|
|
76
|
+
return 'default';
|
|
77
|
+
const isEmbed = (m) => /embed|bge|e5|nomic/i.test(m);
|
|
78
|
+
const pool = models.filter((m) => !isEmbed(m));
|
|
79
|
+
const ranked = (pool.length ? pool : models).slice();
|
|
80
|
+
const sizeOf = (m) => {
|
|
81
|
+
const b = m.match(/(\d+(?:\.\d+)?)\s*b\b/i);
|
|
82
|
+
if (b)
|
|
83
|
+
return parseFloat(b[1]);
|
|
84
|
+
if (/mini|small|tiny|nano|phi/i.test(m))
|
|
85
|
+
return 3;
|
|
86
|
+
return 999;
|
|
87
|
+
};
|
|
88
|
+
const score = (m) => sizeOf(m) - (/coder|code/i.test(m) ? 0.5 : 0);
|
|
89
|
+
ranked.sort((a, b) => score(a) - score(b));
|
|
90
|
+
return ranked[0];
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Return the first cloud provider from `chain` that has a key available.
|
|
94
|
+
* Returns null when no cloud provider in the chain has a key.
|
|
95
|
+
*/
|
|
96
|
+
function pickCloudProvider(chain) {
|
|
97
|
+
for (const id of chain) {
|
|
98
|
+
if (isCloudProvider(id) && cloudKeyAvailable(id)) {
|
|
99
|
+
return id;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Derive a cloud model label from a provider id.
|
|
106
|
+
* Used only in the reason string — never affects routing logic.
|
|
107
|
+
*/
|
|
108
|
+
function defaultCloudModel(provider) {
|
|
109
|
+
const models = {
|
|
110
|
+
anthropic: 'claude-3-5-haiku',
|
|
111
|
+
openai: 'gpt-4o-mini',
|
|
112
|
+
gemini: 'gemini-1.5-flash',
|
|
113
|
+
cohere: 'command-r',
|
|
114
|
+
groq: 'llama3-8b-8192',
|
|
115
|
+
mistral: 'mistral-small',
|
|
116
|
+
azure: 'gpt-4o-mini',
|
|
117
|
+
};
|
|
118
|
+
return models[provider.toLowerCase()] ?? provider;
|
|
119
|
+
}
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
// Public: chooseRoute
|
|
122
|
+
// ---------------------------------------------------------------------------
|
|
123
|
+
/**
|
|
124
|
+
* Choose the provider + model for a single task attempt.
|
|
125
|
+
*
|
|
126
|
+
* LOCAL-FIRST: the default return is always a local RouteDecision (tier
|
|
127
|
+
* 'local'). A cloud route is returned ONLY when ALL three gates hold:
|
|
128
|
+
* - opts.allowCloud === true
|
|
129
|
+
* - opts.lastReason !== 'none'
|
|
130
|
+
* - cloudKeyAvailable(<cloud provider from chain>) === true
|
|
131
|
+
*
|
|
132
|
+
* Routing-rule application (cfg.models.routing):
|
|
133
|
+
* The first rule whose `match` string appears (case-insensitive substring)
|
|
134
|
+
* in taskGoal wins and sets the preferred model. The preferred model is
|
|
135
|
+
* applied to whichever LOCAL provider is active; it does NOT force a cloud
|
|
136
|
+
* provider on its own.
|
|
137
|
+
*
|
|
138
|
+
* Never throws — returns a safe 'local-fallback' RouteDecision on any error.
|
|
139
|
+
*/
|
|
140
|
+
export async function chooseRoute(taskGoal, cfg, opts) {
|
|
141
|
+
try {
|
|
142
|
+
// ------------------------------------------------------------------
|
|
143
|
+
// 1. Check escalation gates — cloud is ONLY reachable when all hold.
|
|
144
|
+
// ------------------------------------------------------------------
|
|
145
|
+
const mayEscalate = opts.allowCloud &&
|
|
146
|
+
opts.lastReason !== 'none';
|
|
147
|
+
if (mayEscalate) {
|
|
148
|
+
const cloudProvider = pickCloudProvider(cfg.models.providerChain);
|
|
149
|
+
if (cloudProvider !== null) {
|
|
150
|
+
// All three gates passed — return a cloud escalation route.
|
|
151
|
+
const cloudModel = defaultCloudModel(cloudProvider);
|
|
152
|
+
return {
|
|
153
|
+
provider: cloudProvider,
|
|
154
|
+
model: cloudModel,
|
|
155
|
+
tier: 'cloud',
|
|
156
|
+
reason: `escalated to cloud (${cloudProvider}/${cloudModel}) after ${opts.lastReason} on attempt ${opts.attempt}; --allow-cloud set and key present`,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
// allowCloud + real reason, but no cloud key available → fall through to local.
|
|
160
|
+
}
|
|
161
|
+
// ------------------------------------------------------------------
|
|
162
|
+
// 2. Resolve the best available LOCAL provider via the registry.
|
|
163
|
+
// ------------------------------------------------------------------
|
|
164
|
+
const registry = await getProviderRegistry(cfg);
|
|
165
|
+
// Walk the chain for the first UP local provider.
|
|
166
|
+
let activeLocalId = null;
|
|
167
|
+
let activeModels = [];
|
|
168
|
+
for (const providerId of registry.chain) {
|
|
169
|
+
if (isCloudProvider(providerId))
|
|
170
|
+
continue; // skip cloud entries in chain
|
|
171
|
+
const endpoint = registry.providers.find((p) => p.id === providerId);
|
|
172
|
+
if (endpoint?.up) {
|
|
173
|
+
activeLocalId = providerId;
|
|
174
|
+
activeModels = endpoint.models;
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// Failover: if the chain yielded nothing, take any up local endpoint.
|
|
179
|
+
if (activeLocalId === null) {
|
|
180
|
+
for (const endpoint of registry.providers) {
|
|
181
|
+
if (!isCloudProvider(endpoint.id) && endpoint.up) {
|
|
182
|
+
activeLocalId = endpoint.id;
|
|
183
|
+
activeModels = endpoint.models;
|
|
184
|
+
break;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// ------------------------------------------------------------------
|
|
189
|
+
// 3. Apply routing rules (cfg.models.routing) to pick a preferred model.
|
|
190
|
+
// Rules only affect model selection — they never force a cloud route.
|
|
191
|
+
// ------------------------------------------------------------------
|
|
192
|
+
let preferredModel = null;
|
|
193
|
+
let ruleMatchReason = '';
|
|
194
|
+
if (cfg.models.routing && cfg.models.routing.length > 0) {
|
|
195
|
+
const goalLower = taskGoal.toLowerCase();
|
|
196
|
+
for (const rule of cfg.models.routing) {
|
|
197
|
+
if (goalLower.includes(rule.match.toLowerCase())) {
|
|
198
|
+
preferredModel = rule.model;
|
|
199
|
+
ruleMatchReason = `routing rule "${rule.match}" → model "${rule.model}"; `;
|
|
200
|
+
break;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
// ------------------------------------------------------------------
|
|
205
|
+
// 4. No local provider available — return a safe "unavailable" local
|
|
206
|
+
// decision. Never silently escalate to cloud.
|
|
207
|
+
// ------------------------------------------------------------------
|
|
208
|
+
if (activeLocalId === null) {
|
|
209
|
+
return {
|
|
210
|
+
provider: 'local',
|
|
211
|
+
model: preferredModel ?? 'default',
|
|
212
|
+
tier: 'local',
|
|
213
|
+
reason: `${ruleMatchReason}no local provider reachable; staying local (start Ollama or LM Studio, ` +
|
|
214
|
+
`or pass --allow-cloud with an escalation reason to escalate)`,
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
// ------------------------------------------------------------------
|
|
218
|
+
// 5. Determine the concrete model.
|
|
219
|
+
// If a routing rule fired and that model is available → use it.
|
|
220
|
+
// Otherwise → pickBestLocalModel from the provider's model list.
|
|
221
|
+
// ------------------------------------------------------------------
|
|
222
|
+
let chosenModel;
|
|
223
|
+
let modelReason;
|
|
224
|
+
if (preferredModel !== null) {
|
|
225
|
+
// Prefer the rule's model if it exists in the provider's list,
|
|
226
|
+
// otherwise use it verbatim (the user explicitly chose it).
|
|
227
|
+
const exists = activeModels.some((m) => m.toLowerCase() === preferredModel.toLowerCase());
|
|
228
|
+
chosenModel = exists
|
|
229
|
+
? activeModels.find((m) => m.toLowerCase() === preferredModel.toLowerCase())
|
|
230
|
+
: preferredModel;
|
|
231
|
+
modelReason = `${ruleMatchReason}model from routing rule`;
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
chosenModel = pickBestLocalModel(activeModels);
|
|
235
|
+
modelReason = activeModels.length > 0
|
|
236
|
+
? 'local-first default (smallest/fastest available model)'
|
|
237
|
+
: 'local-first default (no models listed; using "default")';
|
|
238
|
+
}
|
|
239
|
+
return {
|
|
240
|
+
provider: activeLocalId,
|
|
241
|
+
model: chosenModel,
|
|
242
|
+
tier: 'local',
|
|
243
|
+
reason: `${modelReason} on ${activeLocalId}`,
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
catch (err) {
|
|
247
|
+
// Never throw — return a safe local fallback.
|
|
248
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
249
|
+
return {
|
|
250
|
+
provider: 'local',
|
|
251
|
+
model: 'default',
|
|
252
|
+
tier: 'local',
|
|
253
|
+
reason: `router error (${detail}); safe local fallback`,
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../../src/core/run/router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* M20: Bounded runtime self-heal wrapper.
|
|
3
|
+
*
|
|
4
|
+
* Wraps a single runtime operation (MCP downstream spawn or model call) with
|
|
5
|
+
* bounded, classified heal logic. Reuses `withRetry` (M11) for the loop +
|
|
6
|
+
* backoff — does NOT reimplement backoff from scratch.
|
|
7
|
+
*
|
|
8
|
+
* GUARDRAILS:
|
|
9
|
+
* - BOUNDED by construction: never loops more than policy.maxRestarts
|
|
10
|
+
* heal-triggered retries. No infinite restart/downgrade loop.
|
|
11
|
+
* - model-downgrade: SMALLER LOCAL model only — never escalates to cloud,
|
|
12
|
+
* never increases cost.
|
|
13
|
+
* - rate-backoff: only when cloud is already in play (caller opted in).
|
|
14
|
+
* - opt-out: callers can check ASHLR_NO_HEAL at their call site and skip.
|
|
15
|
+
* - Rethrows last error on exhaustion or non-recoverable failure.
|
|
16
|
+
* - Never throws from the heal machinery itself (only from fn exhaustion).
|
|
17
|
+
*
|
|
18
|
+
* No new runtime deps. ESM/NodeNext: all sibling imports use the .js extension.
|
|
19
|
+
*/
|
|
20
|
+
import type { HealPolicy, HealEvent } from '../types.js';
|
|
21
|
+
/**
|
|
22
|
+
* Conservative bounded default: 2 heal-triggered retries, downgrade allowed.
|
|
23
|
+
* Callers may override; this is always a safe starting point.
|
|
24
|
+
*/
|
|
25
|
+
export declare function defaultHealPolicy(): HealPolicy;
|
|
26
|
+
/**
|
|
27
|
+
* Bounded self-heal wrapper for a runtime operation `fn`.
|
|
28
|
+
*
|
|
29
|
+
* `fn` receives the 1-based attempt number so the caller can vary its
|
|
30
|
+
* behaviour across attempts (e.g. pick a smaller model on attempt > 1 when a
|
|
31
|
+
* 'model-downgrade' heal event has been emitted).
|
|
32
|
+
*
|
|
33
|
+
* `policy.maxRestarts` is the hard cap on heal-triggered retries — the total
|
|
34
|
+
* number of fn invocations is at most `policy.maxRestarts + 1`.
|
|
35
|
+
*
|
|
36
|
+
* `onHeal` is called synchronously before each retry with the classified event.
|
|
37
|
+
* It MUST NOT throw; any throw is silently swallowed to preserve retry flow.
|
|
38
|
+
*
|
|
39
|
+
* `allowCloud` (default false) gates 'rate-backoff' — pass true only when the
|
|
40
|
+
* caller has already enabled cloud routing; withHeal never enables cloud on its
|
|
41
|
+
* own.
|
|
42
|
+
*
|
|
43
|
+
* Rethrows the last error when:
|
|
44
|
+
* - all retries are exhausted, OR
|
|
45
|
+
* - the error is not a recognised heal case (non-retryable).
|
|
46
|
+
*
|
|
47
|
+
* Backed by `withRetry` (M11) for deterministic bounded exponential backoff:
|
|
48
|
+
* attempt 1 failure → retry immediately (0 ms);
|
|
49
|
+
* attempt 2 failure → 500 ms;
|
|
50
|
+
* attempt 3 failure → 1 000 ms; … capped at 30 s.
|
|
51
|
+
*/
|
|
52
|
+
export declare function withHeal<T>(fn: (attempt: number) => Promise<T>, policy: HealPolicy, onHeal: (e: HealEvent) => void, allowCloud?: boolean): Promise<T>;
|