opencandle 0.11.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -186
- package/dist/analysts/contracts.js +0 -1
- package/dist/analysts/orchestrator.js +0 -1
- package/dist/cli-main.js +22 -15
- package/dist/cli-options.d.ts +4 -0
- package/dist/cli-options.js +33 -0
- package/dist/cli.js +8 -3
- package/dist/config.d.ts +4 -0
- package/dist/config.js +1 -1
- package/dist/doctor/cli-command.js +9 -5
- package/dist/doctor/render.js +0 -1
- package/dist/doctor/report.js +53 -11
- package/dist/gui/server/ask-user-bridge.d.ts +19 -0
- package/dist/gui/server/ask-user-bridge.js +55 -0
- package/dist/gui/server/automation-heartbeat.d.ts +25 -0
- package/dist/gui/server/automation-heartbeat.js +61 -0
- package/dist/gui/server/background-quotes.d.ts +39 -0
- package/dist/gui/server/background-quotes.js +71 -0
- package/dist/gui/server/chat-event-adapter.d.ts +16 -0
- package/dist/gui/server/chat-event-adapter.js +388 -0
- package/dist/gui/server/gui-session-manager.d.ts +2 -0
- package/dist/gui/server/gui-session-manager.js +4 -0
- package/dist/gui/server/history-snapshot-store.d.ts +8 -0
- package/dist/gui/server/history-snapshot-store.js +43 -0
- package/dist/gui/server/http-routes.d.ts +71 -0
- package/dist/gui/server/http-routes.js +1033 -0
- package/dist/gui/server/invoke-tool.d.ts +47 -0
- package/dist/gui/server/invoke-tool.js +373 -0
- package/dist/gui/server/live-chat-event-adapter.d.ts +21 -0
- package/dist/gui/server/live-chat-event-adapter.js +224 -0
- package/dist/gui/server/local-session-coordinator.d.ts +26 -0
- package/dist/gui/server/local-session-coordinator.js +53 -0
- package/dist/gui/server/market-indices-api.d.ts +21 -0
- package/dist/gui/server/market-indices-api.js +26 -0
- package/dist/gui/server/market-indices-snapshot-store.d.ts +12 -0
- package/dist/gui/server/market-indices-snapshot-store.js +56 -0
- package/dist/gui/server/market-state-api.d.ts +250 -0
- package/dist/gui/server/market-state-api.js +597 -0
- package/dist/gui/server/model-setup.d.ts +55 -0
- package/dist/gui/server/model-setup.js +154 -0
- package/dist/gui/server/private-api-access.d.ts +6 -0
- package/dist/gui/server/private-api-access.js +53 -0
- package/dist/gui/server/projector.d.ts +49 -0
- package/dist/gui/server/projector.js +296 -0
- package/dist/gui/server/prompt-observation.d.ts +8 -0
- package/dist/gui/server/prompt-observation.js +43 -0
- package/dist/gui/server/quote-snapshot-store.d.ts +14 -0
- package/dist/gui/server/quote-snapshot-store.js +49 -0
- package/dist/gui/server/server.d.ts +1 -0
- package/dist/gui/server/server.js +262 -0
- package/dist/gui/server/session-actions.d.ts +60 -0
- package/dist/gui/server/session-actions.js +218 -0
- package/dist/gui/server/session-entry-wait.d.ts +27 -0
- package/dist/gui/server/session-entry-wait.js +129 -0
- package/dist/gui/server/session-list.d.ts +2 -0
- package/dist/gui/server/session-list.js +11 -0
- package/dist/gui/server/shutdown.d.ts +10 -0
- package/dist/gui/server/shutdown.js +29 -0
- package/dist/gui/server/tool-invoke-ack.d.ts +17 -0
- package/dist/gui/server/tool-invoke-ack.js +26 -0
- package/dist/gui/server/tool-metadata.d.ts +93 -0
- package/dist/gui/server/tool-metadata.js +148 -0
- package/dist/gui/server/websocket.d.ts +9 -0
- package/dist/gui/server/websocket.js +124 -0
- package/dist/gui/server/writer-lock.d.ts +1 -0
- package/dist/gui/server/writer-lock.js +1 -0
- package/dist/gui/server/ws-hub.d.ts +50 -0
- package/dist/gui/server/ws-hub.js +284 -0
- package/dist/gui/shared/chat-events.d.ts +174 -0
- package/dist/gui/shared/chat-events.js +13 -0
- package/dist/gui/shared/event-reducer.d.ts +3 -0
- package/dist/gui/shared/event-reducer.js +187 -0
- package/dist/index.js +0 -1
- package/dist/infra/cache.d.ts +4 -0
- package/dist/infra/cache.js +4 -1
- package/dist/infra/freshness.js +0 -1
- package/dist/infra/http-client.js +1 -2
- package/dist/infra/index.js +0 -1
- package/dist/infra/lse-byte-budget.d.ts +10 -0
- package/dist/infra/lse-byte-budget.js +47 -0
- package/dist/infra/market-calendar.js +0 -1
- package/dist/infra/native-dependencies.js +0 -1
- package/dist/infra/node-version.js +0 -1
- package/dist/infra/open-url.js +0 -1
- package/dist/infra/opencandle-paths.js +0 -1
- package/dist/infra/rate-limiter.js +1 -1
- package/dist/market-state/alert-conditions.js +0 -1
- package/dist/market-state/alert-runner.d.ts +1 -0
- package/dist/market-state/alert-runner.js +5 -4
- package/dist/market-state/daily-report.js +0 -1
- package/dist/market-state/local-automation-service.js +0 -1
- package/dist/market-state/notification-delivery.js +0 -1
- package/dist/market-state/resolve-for-mutation.js +0 -1
- package/dist/market-state/resolve.js +0 -1
- package/dist/market-state/service.d.ts +26 -21
- package/dist/market-state/service.js +175 -36
- package/dist/market-state/summaries.js +1 -13
- package/dist/memory/index.js +0 -1
- package/dist/memory/manager.js +0 -1
- package/dist/memory/preference-extractor.js +0 -1
- package/dist/memory/retrieval.js +0 -1
- package/dist/memory/sqlite.js +60 -11
- package/dist/memory/storage.js +0 -1
- package/dist/memory/tool-defaults.js +0 -1
- package/dist/memory/types.js +0 -1
- package/dist/monitor.js +0 -1
- package/dist/onboarding/connect.js +0 -1
- package/dist/onboarding/credential-interceptor.js +0 -1
- package/dist/onboarding/degradation-accumulator.js +0 -1
- package/dist/onboarding/prompt-user.d.ts +1 -1
- package/dist/onboarding/prompt-user.js +0 -1
- package/dist/onboarding/provider-status.js +0 -1
- package/dist/onboarding/providers.d.ts +16 -1
- package/dist/onboarding/providers.js +20 -1
- package/dist/onboarding/state.js +0 -1
- package/dist/onboarding/tool-helpers.js +0 -1
- package/dist/onboarding/tool-tags.js +0 -1
- package/dist/onboarding/validate-model-key.d.ts +17 -0
- package/dist/onboarding/validate-model-key.js +86 -0
- package/dist/onboarding/validation.js +8 -1
- package/dist/pi/opencandle-extension.d.ts +2 -1
- package/dist/pi/opencandle-extension.js +4 -4
- package/dist/pi/session-action-dedupe.js +0 -1
- package/dist/pi/session-storage.js +0 -1
- package/dist/pi/session-writer-lock.js +0 -1
- package/dist/pi/session.d.ts +2 -3
- package/dist/pi/session.js +7 -6
- package/dist/pi/setup.d.ts +4 -2
- package/dist/pi/setup.js +60 -61
- package/dist/pi/tool-adapter.js +0 -1
- package/dist/pi/tui-session-coordinator.js +0 -1
- package/dist/prompts/context-builder.js +1 -2
- package/dist/prompts/disclaimer.js +0 -1
- package/dist/prompts/policy-cards.js +0 -1
- package/dist/prompts/sections.js +0 -1
- package/dist/prompts/symbol-preflight.js +0 -1
- package/dist/prompts/workflow-prompts.js +16 -15
- package/dist/providers/alpha-vantage.js +2 -3
- package/dist/providers/coingecko.js +0 -1
- package/dist/providers/errors.js +0 -1
- package/dist/providers/exa-search.js +11 -10
- package/dist/providers/external-tool-command.js +0 -1
- package/dist/providers/external-tool-error.js +0 -1
- package/dist/providers/fear-greed.js +0 -1
- package/dist/providers/finnhub.js +0 -1
- package/dist/providers/fred.js +0 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.js +1 -1
- package/dist/providers/lse.d.ts +35 -0
- package/dist/providers/lse.js +284 -0
- package/dist/providers/polymarket.js +22 -6
- package/dist/providers/provider-credential-error.js +0 -1
- package/dist/providers/reddit-cli.js +0 -1
- package/dist/providers/reddit.js +0 -1
- package/dist/providers/sec-edgar.js +0 -1
- package/dist/providers/tradingview.js +1 -2
- package/dist/providers/twitter-cli.js +0 -1
- package/dist/providers/twitter.js +0 -1
- package/dist/providers/web-search.js +15 -12
- package/dist/providers/with-fallback.js +0 -1
- package/dist/providers/wrap-provider.js +1 -1
- package/dist/providers/yahoo-finance.js +68 -4
- package/dist/routing/classify-intent.js +0 -1
- package/dist/routing/defaults.js +0 -1
- package/dist/routing/entity-extractor.js +2 -3
- package/dist/routing/fund-symbols.js +0 -1
- package/dist/routing/horizon.js +0 -1
- package/dist/routing/index.js +0 -1
- package/dist/routing/legacy-rule-router.js +0 -1
- package/dist/routing/planning.js +0 -1
- package/dist/routing/route-manifest.js +1 -1
- package/dist/routing/router-llm-client.d.ts +2 -2
- package/dist/routing/router-llm-client.js +0 -1
- package/dist/routing/router-prompt.js +0 -1
- package/dist/routing/router-types.js +0 -1
- package/dist/routing/router.js +9 -3
- package/dist/routing/slot-resolver.js +0 -1
- package/dist/routing/symbol-disambiguator.js +0 -1
- package/dist/routing/turn-context.js +0 -1
- package/dist/routing/types.js +0 -1
- package/dist/runtime/answer-contracts.js +0 -1
- package/dist/runtime/artifact-contracts.js +0 -1
- package/dist/runtime/evidence.d.ts +1 -0
- package/dist/runtime/evidence.js +1 -2
- package/dist/runtime/numeric-claims.js +0 -1
- package/dist/runtime/planning-evidence.js +0 -1
- package/dist/runtime/prompt-step.js +0 -1
- package/dist/runtime/provider-tracker.js +0 -1
- package/dist/runtime/run-context.js +0 -1
- package/dist/runtime/session-coordinator.d.ts +2 -2
- package/dist/runtime/session-coordinator.js +2 -3
- package/dist/runtime/session-title.js +0 -1
- package/dist/runtime/tool-defaults-wrapper.js +0 -1
- package/dist/runtime/validation.js +0 -1
- package/dist/runtime/workflow-events.js +0 -1
- package/dist/runtime/workflow-runner.d.ts +1 -0
- package/dist/runtime/workflow-runner.js +8 -3
- package/dist/runtime/workflow-types.js +0 -1
- package/dist/sentiment/adapters/finnhub.js +0 -1
- package/dist/sentiment/adapters/reddit.js +0 -1
- package/dist/sentiment/adapters/twitter.js +0 -1
- package/dist/sentiment/adapters/web.js +0 -1
- package/dist/sentiment/index.js +4 -2
- package/dist/sentiment/insights.js +0 -1
- package/dist/sentiment/keywords.js +0 -1
- package/dist/sentiment/pipeline.js +0 -1
- package/dist/sentiment/scorer.js +0 -1
- package/dist/sentiment/store.js +0 -1
- package/dist/sentiment/trends.js +0 -1
- package/dist/sentiment/types.js +0 -1
- package/dist/system-prompt.js +0 -1
- package/dist/tool-kit.js +0 -1
- package/dist/tools/fundamentals/company-overview.d.ts +1 -1
- package/dist/tools/fundamentals/company-overview.js +2 -1
- package/dist/tools/fundamentals/comps.js +6 -4
- package/dist/tools/fundamentals/dcf.js +37 -9
- package/dist/tools/fundamentals/earnings.d.ts +1 -1
- package/dist/tools/fundamentals/earnings.js +2 -1
- package/dist/tools/fundamentals/financials.js +88 -9
- package/dist/tools/fundamentals/sec-filings.js +0 -1
- package/dist/tools/index.d.ts +121 -2
- package/dist/tools/index.js +3 -1
- package/dist/tools/interaction/ask-user.js +11 -1
- package/dist/tools/macro/event-probabilities.js +0 -1
- package/dist/tools/macro/fear-greed.d.ts +1 -1
- package/dist/tools/macro/fear-greed.js +0 -1
- package/dist/tools/macro/fred-data.d.ts +1 -1
- package/dist/tools/macro/fred-data.js +2 -1
- package/dist/tools/market/crypto-history.js +0 -1
- package/dist/tools/market/crypto-price.d.ts +2 -2
- package/dist/tools/market/crypto-price.js +0 -1
- package/dist/tools/market/price-comparison.d.ts +30 -0
- package/dist/tools/market/price-comparison.js +202 -0
- package/dist/tools/market/screen-stocks.js +0 -1
- package/dist/tools/market/search-ticker.js +1 -2
- package/dist/tools/market/stock-history.d.ts +18 -3
- package/dist/tools/market/stock-history.js +132 -18
- package/dist/tools/market/stock-quote.d.ts +2 -2
- package/dist/tools/market/stock-quote.js +0 -1
- package/dist/tools/options/greeks.js +0 -1
- package/dist/tools/options/option-chain.d.ts +2 -2
- package/dist/tools/options/option-chain.js +0 -1
- package/dist/tools/portfolio/alerts.d.ts +2 -1
- package/dist/tools/portfolio/alerts.js +228 -2
- package/dist/tools/portfolio/correlation.d.ts +1 -1
- package/dist/tools/portfolio/correlation.js +23 -5
- package/dist/tools/portfolio/daily-report.js +0 -1
- package/dist/tools/portfolio/holdings-overlap.js +0 -1
- package/dist/tools/portfolio/notifications.js +0 -1
- package/dist/tools/portfolio/risk-analysis.d.ts +2 -2
- package/dist/tools/portfolio/risk-analysis.js +0 -1
- package/dist/tools/portfolio/tracker.d.ts +3 -1
- package/dist/tools/portfolio/tracker.js +57 -10
- package/dist/tools/portfolio/watchlist.d.ts +3 -6
- package/dist/tools/portfolio/watchlist.js +101 -110
- package/dist/tools/sentiment/insight-format.js +0 -1
- package/dist/tools/sentiment/query-match.js +0 -1
- package/dist/tools/sentiment/reddit-sentiment.js +0 -1
- package/dist/tools/sentiment/sentiment-summary.js +8 -4
- package/dist/tools/sentiment/sentiment-trend.d.ts +5 -1
- package/dist/tools/sentiment/sentiment-trend.js +6 -2
- package/dist/tools/sentiment/twitter-sentiment.js +0 -1
- package/dist/tools/sentiment/untrusted-text.js +0 -1
- package/dist/tools/sentiment/web-search.d.ts +1 -1
- package/dist/tools/sentiment/web-search.js +0 -1
- package/dist/tools/sentiment/web-sentiment.js +0 -1
- package/dist/tools/technical/backtest.js +0 -1
- package/dist/tools/technical/indicators.js +0 -1
- package/dist/types/fundamentals.js +0 -1
- package/dist/types/index.js +0 -1
- package/dist/types/macro.js +0 -1
- package/dist/types/market.d.ts +8 -0
- package/dist/types/market.js +0 -1
- package/dist/types/options.js +0 -1
- package/dist/types/portfolio.js +0 -1
- package/dist/types/prediction-markets.js +0 -1
- package/dist/types/sentiment.js +0 -1
- package/dist/workflows/compare-assets.js +0 -1
- package/dist/workflows/index.js +0 -1
- package/dist/workflows/options-screener.js +0 -1
- package/dist/workflows/portfolio-builder.js +0 -1
- package/gui/web/dist/assets/CatalogOverlay-Cy8Fq0fn.js +1 -0
- package/gui/web/dist/assets/allocation-donut-DgBRIKCk.js +52 -0
- package/gui/web/dist/assets/index-DIlFyIOO.js +66 -0
- package/gui/web/dist/assets/index-DS4jESOB.css +2 -0
- package/gui/web/dist/assets/market-chart-DammaCjH.js +1 -0
- package/gui/web/dist/assets/utils-CnADgYgh.js +1 -0
- package/gui/web/dist/index.html +3 -2
- package/package.json +23 -26
- package/dist/analysts/contracts.js.map +0 -1
- package/dist/analysts/orchestrator.js.map +0 -1
- package/dist/cli-main.js.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/doctor/cli-command.js.map +0 -1
- package/dist/doctor/render.js.map +0 -1
- package/dist/doctor/report.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/infra/cache.js.map +0 -1
- package/dist/infra/freshness.js.map +0 -1
- package/dist/infra/http-client.js.map +0 -1
- package/dist/infra/index.js.map +0 -1
- package/dist/infra/market-calendar.js.map +0 -1
- package/dist/infra/native-dependencies.js.map +0 -1
- package/dist/infra/node-version.js.map +0 -1
- package/dist/infra/open-url.js.map +0 -1
- package/dist/infra/opencandle-paths.js.map +0 -1
- package/dist/infra/rate-limiter.js.map +0 -1
- package/dist/market-state/alert-conditions.js.map +0 -1
- package/dist/market-state/alert-runner.js.map +0 -1
- package/dist/market-state/daily-report.js.map +0 -1
- package/dist/market-state/local-automation-service.js.map +0 -1
- package/dist/market-state/notification-delivery.js.map +0 -1
- package/dist/market-state/resolve-for-mutation.js.map +0 -1
- package/dist/market-state/resolve.js.map +0 -1
- package/dist/market-state/service.js.map +0 -1
- package/dist/market-state/summaries.js.map +0 -1
- package/dist/memory/index.js.map +0 -1
- package/dist/memory/manager.js.map +0 -1
- package/dist/memory/preference-extractor.js.map +0 -1
- package/dist/memory/retrieval.js.map +0 -1
- package/dist/memory/sqlite.js.map +0 -1
- package/dist/memory/storage.js.map +0 -1
- package/dist/memory/tool-defaults.js.map +0 -1
- package/dist/memory/types.js.map +0 -1
- package/dist/monitor.js.map +0 -1
- package/dist/onboarding/connect.js.map +0 -1
- package/dist/onboarding/credential-interceptor.js.map +0 -1
- package/dist/onboarding/degradation-accumulator.js.map +0 -1
- package/dist/onboarding/prompt-user.js.map +0 -1
- package/dist/onboarding/provider-status.js.map +0 -1
- package/dist/onboarding/providers.js.map +0 -1
- package/dist/onboarding/state.js.map +0 -1
- package/dist/onboarding/tool-helpers.js.map +0 -1
- package/dist/onboarding/tool-tags.js.map +0 -1
- package/dist/onboarding/validation.js.map +0 -1
- package/dist/pi/opencandle-extension.js.map +0 -1
- package/dist/pi/session-action-dedupe.js.map +0 -1
- package/dist/pi/session-storage.js.map +0 -1
- package/dist/pi/session-writer-lock.js.map +0 -1
- package/dist/pi/session.js.map +0 -1
- package/dist/pi/setup.js.map +0 -1
- package/dist/pi/tool-adapter.js.map +0 -1
- package/dist/pi/tui-session-coordinator.js.map +0 -1
- package/dist/prompts/context-builder.js.map +0 -1
- package/dist/prompts/disclaimer.js.map +0 -1
- package/dist/prompts/policy-cards.js.map +0 -1
- package/dist/prompts/sections.js.map +0 -1
- package/dist/prompts/symbol-preflight.js.map +0 -1
- package/dist/prompts/workflow-prompts.js.map +0 -1
- package/dist/providers/alpha-vantage.js.map +0 -1
- package/dist/providers/coingecko.js.map +0 -1
- package/dist/providers/errors.js.map +0 -1
- package/dist/providers/exa-search.js.map +0 -1
- package/dist/providers/external-tool-command.js.map +0 -1
- package/dist/providers/external-tool-error.js.map +0 -1
- package/dist/providers/fear-greed.js.map +0 -1
- package/dist/providers/finnhub.js.map +0 -1
- package/dist/providers/fred.js.map +0 -1
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/polymarket.js.map +0 -1
- package/dist/providers/provider-credential-error.js.map +0 -1
- package/dist/providers/reddit-cli.js.map +0 -1
- package/dist/providers/reddit.js.map +0 -1
- package/dist/providers/sec-edgar.js.map +0 -1
- package/dist/providers/tradingview.js.map +0 -1
- package/dist/providers/twitter-cli.js.map +0 -1
- package/dist/providers/twitter.js.map +0 -1
- package/dist/providers/web-search.js.map +0 -1
- package/dist/providers/with-fallback.js.map +0 -1
- package/dist/providers/wrap-provider.js.map +0 -1
- package/dist/providers/yahoo-finance.js.map +0 -1
- package/dist/routing/classify-intent.js.map +0 -1
- package/dist/routing/defaults.js.map +0 -1
- package/dist/routing/entity-extractor.js.map +0 -1
- package/dist/routing/fund-symbols.js.map +0 -1
- package/dist/routing/horizon.js.map +0 -1
- package/dist/routing/index.js.map +0 -1
- package/dist/routing/legacy-rule-router.js.map +0 -1
- package/dist/routing/planning.js.map +0 -1
- package/dist/routing/route-manifest.js.map +0 -1
- package/dist/routing/router-llm-client.js.map +0 -1
- package/dist/routing/router-prompt.js.map +0 -1
- package/dist/routing/router-types.js.map +0 -1
- package/dist/routing/router.js.map +0 -1
- package/dist/routing/slot-resolver.js.map +0 -1
- package/dist/routing/symbol-disambiguator.js.map +0 -1
- package/dist/routing/turn-context.js.map +0 -1
- package/dist/routing/types.js.map +0 -1
- package/dist/runtime/answer-contracts.js.map +0 -1
- package/dist/runtime/artifact-contracts.js.map +0 -1
- package/dist/runtime/evidence.js.map +0 -1
- package/dist/runtime/numeric-claims.js.map +0 -1
- package/dist/runtime/planning-evidence.js.map +0 -1
- package/dist/runtime/prompt-step.js.map +0 -1
- package/dist/runtime/provider-tracker.js.map +0 -1
- package/dist/runtime/run-context.js.map +0 -1
- package/dist/runtime/session-coordinator.js.map +0 -1
- package/dist/runtime/session-title.js.map +0 -1
- package/dist/runtime/tool-defaults-wrapper.js.map +0 -1
- package/dist/runtime/validation.js.map +0 -1
- package/dist/runtime/workflow-events.js.map +0 -1
- package/dist/runtime/workflow-runner.js.map +0 -1
- package/dist/runtime/workflow-types.js.map +0 -1
- package/dist/sentiment/adapters/finnhub.js.map +0 -1
- package/dist/sentiment/adapters/reddit.js.map +0 -1
- package/dist/sentiment/adapters/twitter.js.map +0 -1
- package/dist/sentiment/adapters/web.js.map +0 -1
- package/dist/sentiment/index.js.map +0 -1
- package/dist/sentiment/insights.js.map +0 -1
- package/dist/sentiment/keywords.js.map +0 -1
- package/dist/sentiment/pipeline.js.map +0 -1
- package/dist/sentiment/scorer.js.map +0 -1
- package/dist/sentiment/store.js.map +0 -1
- package/dist/sentiment/trends.js.map +0 -1
- package/dist/sentiment/types.js.map +0 -1
- package/dist/system-prompt.js.map +0 -1
- package/dist/tool-kit.js.map +0 -1
- package/dist/tools/fundamentals/company-overview.js.map +0 -1
- package/dist/tools/fundamentals/comps.js.map +0 -1
- package/dist/tools/fundamentals/dcf.js.map +0 -1
- package/dist/tools/fundamentals/earnings.js.map +0 -1
- package/dist/tools/fundamentals/financials.js.map +0 -1
- package/dist/tools/fundamentals/sec-filings.js.map +0 -1
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/interaction/ask-user.js.map +0 -1
- package/dist/tools/macro/event-probabilities.js.map +0 -1
- package/dist/tools/macro/fear-greed.js.map +0 -1
- package/dist/tools/macro/fred-data.js.map +0 -1
- package/dist/tools/market/crypto-history.js.map +0 -1
- package/dist/tools/market/crypto-price.js.map +0 -1
- package/dist/tools/market/screen-stocks.js.map +0 -1
- package/dist/tools/market/search-ticker.js.map +0 -1
- package/dist/tools/market/stock-history.js.map +0 -1
- package/dist/tools/market/stock-quote.js.map +0 -1
- package/dist/tools/options/greeks.js.map +0 -1
- package/dist/tools/options/option-chain.js.map +0 -1
- package/dist/tools/portfolio/alerts.js.map +0 -1
- package/dist/tools/portfolio/correlation.js.map +0 -1
- package/dist/tools/portfolio/daily-report.js.map +0 -1
- package/dist/tools/portfolio/holdings-overlap.js.map +0 -1
- package/dist/tools/portfolio/notifications.js.map +0 -1
- package/dist/tools/portfolio/risk-analysis.js.map +0 -1
- package/dist/tools/portfolio/tracker.js.map +0 -1
- package/dist/tools/portfolio/watchlist.js.map +0 -1
- package/dist/tools/sentiment/insight-format.js.map +0 -1
- package/dist/tools/sentiment/query-match.js.map +0 -1
- package/dist/tools/sentiment/reddit-sentiment.js.map +0 -1
- package/dist/tools/sentiment/sentiment-summary.js.map +0 -1
- package/dist/tools/sentiment/sentiment-trend.js.map +0 -1
- package/dist/tools/sentiment/twitter-sentiment.js.map +0 -1
- package/dist/tools/sentiment/untrusted-text.js.map +0 -1
- package/dist/tools/sentiment/web-search.js.map +0 -1
- package/dist/tools/sentiment/web-sentiment.js.map +0 -1
- package/dist/tools/technical/backtest.js.map +0 -1
- package/dist/tools/technical/indicators.js.map +0 -1
- package/dist/types/fundamentals.js.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/types/macro.js.map +0 -1
- package/dist/types/market.js.map +0 -1
- package/dist/types/options.js.map +0 -1
- package/dist/types/portfolio.js.map +0 -1
- package/dist/types/prediction-markets.js.map +0 -1
- package/dist/types/sentiment.js.map +0 -1
- package/dist/workflows/compare-assets.js.map +0 -1
- package/dist/workflows/index.js.map +0 -1
- package/dist/workflows/options-screener.js.map +0 -1
- package/dist/workflows/portfolio-builder.js.map +0 -1
- package/gui/server/ask-user-bridge.ts +0 -89
- package/gui/server/automation-heartbeat.ts +0 -97
- package/gui/server/background-quotes.ts +0 -127
- package/gui/server/chat-event-adapter.ts +0 -294
- package/gui/server/gui-session-manager.ts +0 -5
- package/gui/server/http-routes.ts +0 -1201
- package/gui/server/invoke-tool.ts +0 -490
- package/gui/server/live-chat-event-adapter.ts +0 -243
- package/gui/server/local-session-coordinator.ts +0 -97
- package/gui/server/market-state-api.ts +0 -331
- package/gui/server/model-setup.ts +0 -254
- package/gui/server/package.json +0 -5
- package/gui/server/private-api-access.ts +0 -62
- package/gui/server/projector.ts +0 -392
- package/gui/server/prompt-observation.ts +0 -58
- package/gui/server/quote-snapshot-store.ts +0 -50
- package/gui/server/server.ts +0 -289
- package/gui/server/session-actions.ts +0 -323
- package/gui/server/session-entry-wait.ts +0 -179
- package/gui/server/shutdown.ts +0 -47
- package/gui/server/tool-invoke-ack.ts +0 -49
- package/gui/server/tool-metadata.ts +0 -167
- package/gui/server/websocket.ts +0 -138
- package/gui/server/writer-lock.ts +0 -1
- package/gui/server/ws-hub.ts +0 -403
- package/gui/shared/chat-events.ts +0 -165
- package/gui/shared/event-reducer.ts +0 -220
- package/gui/web/dist/assets/CatalogOverlay-DZ1niyQm.js +0 -1
- package/gui/web/dist/assets/index-D4F9AJnn.css +0 -2
- package/gui/web/dist/assets/index-DtqMMBTr.js +0 -65
- package/src/analysts/contracts.ts +0 -176
- package/src/analysts/orchestrator.ts +0 -244
- package/src/cli-main.ts +0 -510
- package/src/cli.ts +0 -17
- package/src/config.ts +0 -272
- package/src/doctor/cli-command.ts +0 -83
- package/src/doctor/render.ts +0 -37
- package/src/doctor/report.ts +0 -638
- package/src/index.ts +0 -5
- package/src/infra/cache.ts +0 -127
- package/src/infra/freshness.ts +0 -165
- package/src/infra/http-client.ts +0 -134
- package/src/infra/index.ts +0 -14
- package/src/infra/market-calendar.ts +0 -193
- package/src/infra/native-dependencies.ts +0 -84
- package/src/infra/node-version.ts +0 -23
- package/src/infra/open-url.ts +0 -28
- package/src/infra/opencandle-paths.ts +0 -53
- package/src/infra/rate-limiter.ts +0 -77
- package/src/market-state/alert-conditions.ts +0 -82
- package/src/market-state/alert-runner.ts +0 -863
- package/src/market-state/daily-report.ts +0 -237
- package/src/market-state/local-automation-service.ts +0 -162
- package/src/market-state/notification-delivery.ts +0 -158
- package/src/market-state/resolve-for-mutation.ts +0 -24
- package/src/market-state/resolve.ts +0 -112
- package/src/market-state/service.ts +0 -2208
- package/src/market-state/summaries.ts +0 -75
- package/src/memory/index.ts +0 -10
- package/src/memory/manager.ts +0 -190
- package/src/memory/preference-extractor.ts +0 -106
- package/src/memory/retrieval.ts +0 -71
- package/src/memory/sqlite.ts +0 -577
- package/src/memory/storage.ts +0 -195
- package/src/memory/tool-defaults.ts +0 -108
- package/src/memory/types.ts +0 -71
- package/src/monitor.ts +0 -123
- package/src/onboarding/connect.ts +0 -177
- package/src/onboarding/credential-interceptor.ts +0 -122
- package/src/onboarding/degradation-accumulator.ts +0 -77
- package/src/onboarding/prompt-user.ts +0 -85
- package/src/onboarding/provider-status.ts +0 -382
- package/src/onboarding/providers.ts +0 -442
- package/src/onboarding/state.ts +0 -216
- package/src/onboarding/tool-helpers.ts +0 -104
- package/src/onboarding/tool-tags.ts +0 -244
- package/src/onboarding/validation.ts +0 -152
- package/src/pi/opencandle-extension.ts +0 -1294
- package/src/pi/session-action-dedupe.ts +0 -155
- package/src/pi/session-storage.ts +0 -5
- package/src/pi/session-writer-lock.ts +0 -426
- package/src/pi/session.ts +0 -84
- package/src/pi/setup.ts +0 -399
- package/src/pi/tool-adapter.ts +0 -49
- package/src/pi/tui-session-coordinator.ts +0 -351
- package/src/prompts/context-builder.ts +0 -326
- package/src/prompts/disclaimer.ts +0 -9
- package/src/prompts/policy-cards.ts +0 -228
- package/src/prompts/sections.ts +0 -46
- package/src/prompts/symbol-preflight.ts +0 -80
- package/src/prompts/workflow-prompts.ts +0 -504
- package/src/providers/alpha-vantage.ts +0 -340
- package/src/providers/coingecko.ts +0 -95
- package/src/providers/errors.ts +0 -9
- package/src/providers/exa-search.ts +0 -375
- package/src/providers/external-tool-command.ts +0 -164
- package/src/providers/external-tool-error.ts +0 -20
- package/src/providers/fear-greed.ts +0 -45
- package/src/providers/finnhub.ts +0 -125
- package/src/providers/fred.ts +0 -83
- package/src/providers/index.ts +0 -17
- package/src/providers/polymarket.ts +0 -214
- package/src/providers/provider-credential-error.ts +0 -23
- package/src/providers/reddit-cli.ts +0 -286
- package/src/providers/reddit.ts +0 -106
- package/src/providers/sec-edgar.ts +0 -326
- package/src/providers/tradingview.ts +0 -399
- package/src/providers/twitter-cli.ts +0 -202
- package/src/providers/twitter.ts +0 -102
- package/src/providers/web-search.ts +0 -303
- package/src/providers/with-fallback.ts +0 -42
- package/src/providers/wrap-provider.ts +0 -105
- package/src/providers/yahoo-finance.ts +0 -984
- package/src/routing/classify-intent.ts +0 -380
- package/src/routing/defaults.ts +0 -29
- package/src/routing/entity-extractor.ts +0 -557
- package/src/routing/fund-symbols.ts +0 -58
- package/src/routing/horizon.ts +0 -7
- package/src/routing/index.ts +0 -70
- package/src/routing/legacy-rule-router.ts +0 -13
- package/src/routing/planning.ts +0 -829
- package/src/routing/route-manifest.ts +0 -308
- package/src/routing/router-llm-client.ts +0 -64
- package/src/routing/router-prompt.ts +0 -159
- package/src/routing/router-types.ts +0 -84
- package/src/routing/router.ts +0 -1332
- package/src/routing/slot-resolver.ts +0 -213
- package/src/routing/symbol-disambiguator.ts +0 -72
- package/src/routing/turn-context.ts +0 -108
- package/src/routing/types.ts +0 -77
- package/src/runtime/answer-contracts.ts +0 -693
- package/src/runtime/artifact-contracts.ts +0 -77
- package/src/runtime/evidence.ts +0 -78
- package/src/runtime/numeric-claims.ts +0 -108
- package/src/runtime/planning-evidence.ts +0 -597
- package/src/runtime/prompt-step.ts +0 -185
- package/src/runtime/provider-tracker.ts +0 -40
- package/src/runtime/run-context.ts +0 -32
- package/src/runtime/session-coordinator.ts +0 -1037
- package/src/runtime/session-title.ts +0 -60
- package/src/runtime/tool-defaults-wrapper.ts +0 -43
- package/src/runtime/validation.ts +0 -211
- package/src/runtime/workflow-events.ts +0 -77
- package/src/runtime/workflow-runner.ts +0 -182
- package/src/runtime/workflow-types.ts +0 -105
- package/src/sentiment/adapters/finnhub.ts +0 -49
- package/src/sentiment/adapters/reddit.ts +0 -65
- package/src/sentiment/adapters/twitter.ts +0 -36
- package/src/sentiment/adapters/web.ts +0 -44
- package/src/sentiment/index.ts +0 -49
- package/src/sentiment/insights.ts +0 -269
- package/src/sentiment/keywords.ts +0 -31
- package/src/sentiment/pipeline.ts +0 -91
- package/src/sentiment/scorer.ts +0 -89
- package/src/sentiment/store.ts +0 -260
- package/src/sentiment/trends.ts +0 -96
- package/src/sentiment/types.ts +0 -112
- package/src/system-prompt.ts +0 -115
- package/src/tool-kit.ts +0 -69
- package/src/tools/AGENTS.md +0 -36
- package/src/tools/fundamentals/company-overview.ts +0 -64
- package/src/tools/fundamentals/comps.ts +0 -180
- package/src/tools/fundamentals/dcf.ts +0 -447
- package/src/tools/fundamentals/earnings.ts +0 -57
- package/src/tools/fundamentals/financials.ts +0 -63
- package/src/tools/fundamentals/sec-filings.ts +0 -105
- package/src/tools/index.ts +0 -104
- package/src/tools/interaction/ask-user.ts +0 -93
- package/src/tools/macro/event-probabilities.ts +0 -141
- package/src/tools/macro/fear-greed.ts +0 -41
- package/src/tools/macro/fred-data.ts +0 -92
- package/src/tools/market/crypto-history.ts +0 -72
- package/src/tools/market/crypto-price.ts +0 -65
- package/src/tools/market/screen-stocks.ts +0 -290
- package/src/tools/market/search-ticker.ts +0 -254
- package/src/tools/market/stock-history.ts +0 -104
- package/src/tools/market/stock-quote.ts +0 -73
- package/src/tools/options/greeks.ts +0 -81
- package/src/tools/options/option-chain.ts +0 -134
- package/src/tools/portfolio/alerts.ts +0 -457
- package/src/tools/portfolio/correlation.ts +0 -189
- package/src/tools/portfolio/daily-report.ts +0 -107
- package/src/tools/portfolio/holdings-overlap.ts +0 -139
- package/src/tools/portfolio/notifications.ts +0 -45
- package/src/tools/portfolio/risk-analysis.ts +0 -173
- package/src/tools/portfolio/tracker.ts +0 -308
- package/src/tools/portfolio/watchlist.ts +0 -288
- package/src/tools/sentiment/insight-format.ts +0 -50
- package/src/tools/sentiment/query-match.ts +0 -117
- package/src/tools/sentiment/reddit-sentiment.ts +0 -403
- package/src/tools/sentiment/sentiment-summary.ts +0 -383
- package/src/tools/sentiment/sentiment-trend.ts +0 -75
- package/src/tools/sentiment/twitter-sentiment.ts +0 -287
- package/src/tools/sentiment/untrusted-text.ts +0 -21
- package/src/tools/sentiment/web-search.ts +0 -186
- package/src/tools/sentiment/web-sentiment.ts +0 -96
- package/src/tools/technical/backtest.ts +0 -336
- package/src/tools/technical/indicators.ts +0 -281
- package/src/types/fundamentals.ts +0 -47
- package/src/types/index.ts +0 -26
- package/src/types/macro.ts +0 -27
- package/src/types/market.ts +0 -46
- package/src/types/options.ts +0 -53
- package/src/types/portfolio.ts +0 -83
- package/src/types/prediction-markets.ts +0 -13
- package/src/types/sentiment.ts +0 -129
- package/src/workflows/compare-assets.ts +0 -89
- package/src/workflows/index.ts +0 -3
- package/src/workflows/options-screener.ts +0 -125
- package/src/workflows/portfolio-builder.ts +0 -63
package/dist/types/sentiment.js
CHANGED
package/dist/workflows/index.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{a as e,l as t,o as n,t as r}from"./utils-CnADgYgh.js";import{A as i,C as a,D as o,E as s,I as c,N as l,O as u,P as d,S as f,T as p,_ as m,a as h,b as g,g as _,h as v,k as y,m as b,o as ee,v as x,w as S,x as C,y as w}from"./index-DIlFyIOO.js";var T=i(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),E=i(`chevron-left`,[[`path`,{d:`m15 18-6-6 6-6`,key:`1wnfg3`}]]),D=i(`clipboard`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}]]),O=i(`earth`,[[`path`,{d:`M21.54 15H17a2 2 0 0 0-2 2v4.54`,key:`1djwo0`}],[`path`,{d:`M7 3.34V5a3 3 0 0 0 3 3a2 2 0 0 1 2 2c0 1.1.9 2 2 2a2 2 0 0 0 2-2c0-1.1.9-2 2-2h3.17`,key:`1tzkfa`}],[`path`,{d:`M11 21.95V18a2 2 0 0 0-2-2a2 2 0 0 1-2-2v-1a2 2 0 0 0-2-2H2.05`,key:`14pb5j`}],[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}]]),k=i(`eye-off`,[[`path`,{d:`M10.733 5.076a10.744 10.744 0 0 1 11.205 6.575 1 1 0 0 1 0 .696 10.747 10.747 0 0 1-1.444 2.49`,key:`ct8e1f`}],[`path`,{d:`M14.084 14.158a3 3 0 0 1-4.242-4.242`,key:`151rxh`}],[`path`,{d:`M17.479 17.499a10.75 10.75 0 0 1-15.417-5.151 1 1 0 0 1 0-.696 10.75 10.75 0 0 1 4.446-5.143`,key:`13bj9a`}],[`path`,{d:`m2 2 20 20`,key:`1ooewy`}]]),te=i(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),A=i(`key-round`,[[`path`,{d:`M2.586 17.414A2 2 0 0 0 2 18.828V21a1 1 0 0 0 1 1h3a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h1a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1h.172a2 2 0 0 0 1.414-.586l.814-.814a6.5 6.5 0 1 0-4-4z`,key:`1s6t7t`}],[`circle`,{cx:`16.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`w0ekpg`}]]),j=i(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),M=i(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),N=i(`terminal`,[[`path`,{d:`M12 19h8`,key:`baeox8`}],[`path`,{d:`m4 17 6-6-6-6`,key:`1yngyt`}]]),P=t(n(),1),F=1,ne=.9,re=.8,ie=.17,ae=.1,oe=.999,se=.9999,ce=.99,le=/[\\\/_+.#"@\[\(\{&]/,ue=/[\\\/_+.#"@\[\(\{&]/g,de=/[\s-]/,fe=/[\s-]/g;function pe(e,t,n,r,i,a,o){if(a===t.length)return i===e.length?F:ce;var s=`${i},${a}`;if(o[s]!==void 0)return o[s];for(var c=r.charAt(a),l=n.indexOf(c,i),u=0,d,f,p,m;l>=0;)d=pe(e,t,n,r,l+1,a+1,o),d>u&&(l===i?d*=F:le.test(e.charAt(l-1))?(d*=re,p=e.slice(i,l-1).match(ue),p&&i>0&&(d*=oe**+p.length)):de.test(e.charAt(l-1))?(d*=ne,m=e.slice(i,l-1).match(fe),m&&i>0&&(d*=oe**+m.length)):(d*=ie,i>0&&(d*=oe**+(l-i))),e.charAt(l)!==t.charAt(a)&&(d*=se)),(d<ae&&n.charAt(l-1)===r.charAt(a+1)||r.charAt(a+1)===r.charAt(a)&&n.charAt(l-1)!==r.charAt(a))&&(f=pe(e,t,n,r,l+1,a+2,o),f*ae>d&&(d=f*ae)),d>u&&(u=d),l=n.indexOf(c,l+1);return o[s]=u,u}function me(e){return e.toLowerCase().replace(fe,` `)}function he(e,t,n){return e=n&&n.length>0?`${e+` `+n.join(` `)}`:e,pe(e,t,me(e),me(t),0,0,{})}var I=`[cmdk-group=""]`,L=`[cmdk-group-items=""]`,ge=`[cmdk-group-heading=""]`,_e=`[cmdk-item=""]`,ve=`${_e}:not([aria-disabled="true"])`,R=`cmdk-item-select`,z=`data-value`,ye=(e,t,n)=>he(e,t,n),be=P.createContext(void 0),B=()=>P.useContext(be),xe=P.createContext(void 0),Se=()=>P.useContext(xe),Ce=P.createContext(void 0),we=P.forwardRef((e,t)=>{let n=U(()=>({search:``,value:e.value??e.defaultValue??``,selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}})),r=U(()=>new Set),i=U(()=>new Map),a=U(()=>new Map),o=U(()=>new Set),s=Fe(e),{label:c,children:u,value:f,onValueChange:p,filter:m,shouldFilter:h,loop:g,disablePointerSelection:_=!1,vimBindings:v=!0,...y}=e,b=l(),ee=l(),x=l(),S=P.useRef(null),C=Le();H(()=>{if(f!==void 0){let e=f.trim();n.current.value=e,w.emit()}},[f]),H(()=>{C(6,te)},[]);let w=P.useMemo(()=>({subscribe:e=>(o.current.add(e),()=>o.current.delete(e)),snapshot:()=>n.current,setState:(e,t,r)=>{var i,a,o;if(!Object.is(n.current[e],t)){if(n.current[e]=t,e===`search`)k(),D(),C(1,O);else if(e===`value`){if(document.activeElement.hasAttribute(`cmdk-input`)||document.activeElement.hasAttribute(`cmdk-root`)){let e=document.getElementById(x);e?e.focus():(i=document.getElementById(b))==null||i.focus()}if(C(7,()=>{n.current.selectedItemId=A()?.id,w.emit()}),r||C(5,te),s.current?.value!==void 0){let e=t??``;(o=(a=s.current).onValueChange)==null||o.call(a,e);return}}w.emit()}},emit:()=>{o.current.forEach(e=>e())}}),[]),T=P.useMemo(()=>({value:(e,t,r)=>{t!==a.current.get(e)?.value&&(a.current.set(e,{value:t,keywords:r}),n.current.filtered.items.set(e,E(t,r)),C(2,()=>{D(),w.emit()}))},item:(e,t)=>(r.current.add(e),t&&(i.current.has(t)?i.current.get(t).add(e):i.current.set(t,new Set([e]))),C(3,()=>{k(),D(),n.current.value||O(),w.emit()}),()=>{a.current.delete(e),r.current.delete(e),n.current.filtered.items.delete(e);let t=A();C(4,()=>{k(),t?.getAttribute(`id`)===e&&O(),w.emit()})}),group:e=>(i.current.has(e)||i.current.set(e,new Set),()=>{a.current.delete(e),i.current.delete(e)}),filter:()=>s.current.shouldFilter,label:c||e[`aria-label`],getDisablePointerSelection:()=>s.current.disablePointerSelection,listId:b,inputId:x,labelId:ee,listInnerRef:S}),[]);function E(e,t){let r=s.current?.filter??ye;return e?r(e,n.current.search,t):0}function D(){if(!n.current.search||s.current.shouldFilter===!1)return;let e=n.current.filtered.items,t=[];n.current.filtered.groups.forEach(n=>{let r=i.current.get(n),a=0;r.forEach(t=>{let n=e.get(t);a=Math.max(n,a)}),t.push([n,a])});let r=S.current;j().sort((t,n)=>{let r=t.getAttribute(`id`),i=n.getAttribute(`id`);return(e.get(i)??0)-(e.get(r)??0)}).forEach(e=>{let t=e.closest(L);t?t.appendChild(e.parentElement===t?e:e.closest(`${L} > *`)):r.appendChild(e.parentElement===r?e:e.closest(`${L} > *`))}),t.sort((e,t)=>t[1]-e[1]).forEach(e=>{let t=S.current?.querySelector(`${I}[${z}="${encodeURIComponent(e[0])}"]`);t?.parentElement.appendChild(t)})}function O(){let e=j().find(e=>e.getAttribute(`aria-disabled`)!==`true`)?.getAttribute(z);w.setState(`value`,e||void 0)}function k(){if(!n.current.search||s.current.shouldFilter===!1){n.current.filtered.count=r.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let t of r.current){let r=E(a.current.get(t)?.value??``,a.current.get(t)?.keywords??[]);n.current.filtered.items.set(t,r),r>0&&e++}for(let[e,t]of i.current)for(let r of t)if(n.current.filtered.items.get(r)>0){n.current.filtered.groups.add(e);break}n.current.filtered.count=e}function te(){var e;let t=A();t&&(t.parentElement?.firstChild===t&&((e=t.closest(I)?.querySelector(ge))==null||e.scrollIntoView({block:`nearest`})),t.scrollIntoView({block:`nearest`}))}function A(){return S.current?.querySelector(`${_e}[aria-selected="true"]`)}function j(){return Array.from(S.current?.querySelectorAll(ve)||[])}function M(e){let t=j()[e];t&&w.setState(`value`,t.getAttribute(z))}function N(e){var t;let n=A(),r=j(),i=r.findIndex(e=>e===n),a=r[i+e];(t=s.current)!=null&&t.loop&&(a=i+e<0?r[r.length-1]:i+e===r.length?r[0]:r[i+e]),a&&w.setState(`value`,a.getAttribute(z))}function F(e){let t=A()?.closest(I),n;for(;t&&!n;)t=e>0?Ne(t,I):Pe(t,I),n=t?.querySelector(ve);n?w.setState(`value`,n.getAttribute(z)):N(e)}let ne=()=>M(j().length-1),re=e=>{e.preventDefault(),e.metaKey?ne():e.altKey?F(1):N(1)},ie=e=>{e.preventDefault(),e.metaKey?M(0):e.altKey?F(-1):N(-1)};return P.createElement(d.div,{ref:t,tabIndex:-1,...y,"cmdk-root":``,onKeyDown:e=>{var t;(t=y.onKeyDown)==null||t.call(y,e);let n=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||n))switch(e.key){case`n`:case`j`:v&&e.ctrlKey&&re(e);break;case`ArrowDown`:re(e);break;case`p`:case`k`:v&&e.ctrlKey&&ie(e);break;case`ArrowUp`:ie(e);break;case`Home`:e.preventDefault(),M(0);break;case`End`:e.preventDefault(),ne();break;case`Enter`:{e.preventDefault();let t=A();if(t){let e=new Event(R);t.dispatchEvent(e)}}}}},P.createElement(`label`,{"cmdk-label":``,htmlFor:T.inputId,id:T.labelId,style:ze},c),G(e,e=>P.createElement(xe.Provider,{value:w},P.createElement(be.Provider,{value:T},e))))}),Te=P.forwardRef((e,t)=>{let n=l(),r=P.useRef(null),i=P.useContext(Ce),a=B(),o=Fe(e),s=o.current?.forceMount??i?.forceMount;H(()=>{if(!s)return a.item(n,i?.id)},[s]);let u=Ie(n,r,[e.value,e.children,r],e.keywords),f=Se(),p=W(e=>e.value&&e.value===u.current),m=W(e=>s||a.filter()===!1?!0:!e.search||e.filtered.items.get(n)>0);P.useEffect(()=>{let t=r.current;if(!(!t||e.disabled))return t.addEventListener(R,h),()=>t.removeEventListener(R,h)},[m,e.onSelect,e.disabled]);function h(){var e,t;g(),(t=(e=o.current).onSelect)==null||t.call(e,u.current)}function g(){f.setState(`value`,u.current,!0)}if(!m)return null;let{disabled:_,value:v,onSelect:y,forceMount:b,keywords:ee,...x}=e;return P.createElement(d.div,{ref:c(r,t),...x,id:n,"cmdk-item":``,role:`option`,"aria-disabled":!!_,"aria-selected":!!p,"data-disabled":!!_,"data-selected":!!p,onPointerMove:_||a.getDisablePointerSelection()?void 0:g,onClick:_?void 0:h},e.children)}),Ee=P.forwardRef((e,t)=>{let{heading:n,children:r,forceMount:i,...a}=e,o=l(),s=P.useRef(null),u=P.useRef(null),f=l(),p=B(),m=W(e=>i||p.filter()===!1?!0:!e.search||e.filtered.groups.has(o));H(()=>p.group(o),[]),Ie(o,s,[e.value,e.heading,u]);let h=P.useMemo(()=>({id:o,forceMount:i}),[i]);return P.createElement(d.div,{ref:c(s,t),...a,"cmdk-group":``,role:`presentation`,hidden:!m||void 0},n&&P.createElement(`div`,{ref:u,"cmdk-group-heading":``,"aria-hidden":!0,id:f},n),G(e,e=>P.createElement(`div`,{"cmdk-group-items":``,role:`group`,"aria-labelledby":n?f:void 0},P.createElement(Ce.Provider,{value:h},e))))}),De=P.forwardRef((e,t)=>{let{alwaysRender:n,...r}=e,i=P.useRef(null),a=W(e=>!e.search);return!n&&!a?null:P.createElement(d.div,{ref:c(i,t),...r,"cmdk-separator":``,role:`separator`})}),Oe=P.forwardRef((e,t)=>{let{onValueChange:n,...r}=e,i=e.value!=null,a=Se(),o=W(e=>e.search),s=W(e=>e.selectedItemId),c=B();return P.useEffect(()=>{e.value!=null&&a.setState(`search`,e.value)},[e.value]),P.createElement(d.input,{ref:t,...r,"cmdk-input":``,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,"aria-autocomplete":`list`,role:`combobox`,"aria-expanded":!0,"aria-controls":c.listId,"aria-labelledby":c.labelId,"aria-activedescendant":s,id:c.inputId,type:`text`,value:i?e.value:o,onChange:e=>{i||a.setState(`search`,e.target.value),n?.(e.target.value)}})}),ke=P.forwardRef((e,t)=>{let{children:n,label:r=`Suggestions`,...i}=e,a=P.useRef(null),o=P.useRef(null),s=W(e=>e.selectedItemId),l=B();return P.useEffect(()=>{if(o.current&&a.current){let e=o.current,t=a.current,n,r=new ResizeObserver(()=>{n=requestAnimationFrame(()=>{let n=e.offsetHeight;t.style.setProperty(`--cmdk-list-height`,n.toFixed(1)+`px`)})});return r.observe(e),()=>{cancelAnimationFrame(n),r.unobserve(e)}}},[]),P.createElement(d.div,{ref:c(a,t),...i,"cmdk-list":``,role:`listbox`,tabIndex:-1,"aria-activedescendant":s,"aria-label":r,id:l.listId},G(e,e=>P.createElement(`div`,{ref:c(o,l.listInnerRef),"cmdk-list-sizer":``},e)))}),Ae=P.forwardRef((e,t)=>{let{open:n,onOpenChange:r,overlayClassName:i,contentClassName:a,container:o,...s}=e;return P.createElement(m,{open:n,onOpenChange:r},P.createElement(g,{container:o},P.createElement(w,{"cmdk-overlay":``,className:i}),P.createElement(x,{"aria-label":e.label,"cmdk-dialog":``,className:a},P.createElement(we,{ref:t,...s}))))}),je=P.forwardRef((e,t)=>W(e=>e.filtered.count===0)?P.createElement(d.div,{ref:t,...e,"cmdk-empty":``,role:`presentation`}):null),Me=P.forwardRef((e,t)=>{let{progress:n,children:r,label:i=`Loading...`,...a}=e;return P.createElement(d.div,{ref:t,...a,"cmdk-loading":``,role:`progressbar`,"aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":i},G(e,e=>P.createElement(`div`,{"aria-hidden":!0},e)))}),V=Object.assign(we,{List:ke,Item:Te,Input:Oe,Group:Ee,Separator:De,Dialog:Ae,Empty:je,Loading:Me});function Ne(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return n;n=n.nextElementSibling}}function Pe(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return n;n=n.previousElementSibling}}function Fe(e){let t=P.useRef(e);return H(()=>{t.current=e}),t}var H=typeof window>`u`?P.useEffect:P.useLayoutEffect;function U(e){let t=P.useRef();return t.current===void 0&&(t.current=e()),t}function W(e){let t=Se(),n=()=>e(t.snapshot());return P.useSyncExternalStore(t.subscribe,n,n)}function Ie(e,t,n,r=[]){let i=P.useRef(),a=B();return H(()=>{var o;let s=(()=>{for(let e of n){if(typeof e==`string`)return e.trim();if(typeof e==`object`&&`current`in e)return e.current?e.current.textContent?.trim():i.current}})(),c=r.map(e=>e.trim());a.value(e,s,c),(o=t.current)==null||o.setAttribute(z,s),i.current=s}),i}var Le=()=>{let[e,t]=P.useState(),n=U(()=>new Map);return H(()=>{n.current.forEach(e=>e()),n.current=new Map},[e]),(e,r)=>{n.current.set(e,r),t({})}};function Re(e){let t=e.type;return typeof t==`function`?t(e.props):`render`in t?t.render(e.props):e}function G({asChild:e,children:t},n){return e&&P.isValidElement(t)?P.cloneElement(Re(t),{ref:t.ref},n(t.props.children)):n(t)}var ze={position:`absolute`,width:`1px`,height:`1px`,padding:`0`,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,borderWidth:`0`},K=e(),Be=(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsx)(V,{ref:n,"data-slot":`command`,className:r(`flex h-full w-full flex-col overflow-hidden rounded-lg bg-card text-foreground`,e),...t})}),Ve=(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsxs)(`div`,{"data-slot":`command-input-wrapper`,className:`flex h-10 items-center gap-2 border-b border-border px-3 focus-within:ring-2 focus-within:ring-inset focus-within:ring-ring`,"cmdk-input-wrapper":``,children:[(0,K.jsx)(p,{className:`h-4 w-4 shrink-0 text-muted-foreground`,"aria-hidden":`true`}),(0,K.jsx)(V.Input,{ref:n,"data-slot":`command-input`,className:r(`flex h-9 w-full rounded-md bg-transparent py-2 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50`,e),...t})]})}),He=(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsx)(V.List,{ref:n,"data-slot":`command-list`,className:r(`max-h-72 overflow-y-auto overflow-x-hidden`,e),...t})}),Ue=(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsx)(V.Empty,{ref:n,"data-slot":`command-empty`,className:r(`py-6 text-center text-sm text-muted-foreground`,e),...t})}),We=(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsx)(V.Group,{ref:n,"data-slot":`command-group`,className:r(`overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground`,e),...t})}),Ge=(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsx)(V.Item,{ref:n,"data-slot":`command-item`,className:r(`relative flex min-h-10 cursor-default select-none items-center gap-2 rounded-md px-2 py-2 text-[13px] outline-none transition-[background-color,transform,scale] duration-150 ease-out active:scale-[0.96] focus-visible:ring-2 focus-visible:ring-ring data-[selected=true]:bg-secondary data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50`,e),...t})});(0,P.forwardRef)(function({className:e,...t},n){return(0,K.jsx)(`span`,{ref:n,"data-slot":`command-shortcut`,className:r(`ml-auto text-xs tracking-widest text-muted-foreground`,e),...t})});var Ke=[{value:`1mo`,label:`1M`},{value:`3mo`,label:`3M`},{value:`6mo`,label:`6M`},{value:`1y`,label:`1Y`},{value:`2y`,label:`2Y`},{value:`5y`,label:`5Y`},{value:`max`,label:`Max`}],qe=[{value:`6mo`,label:`6M`},{value:`1y`,label:`1Y`},{value:`2y`,label:`2Y`}],Je=[{value:`hours`,label:`Hours`},{value:`day`,label:`Day`},{value:`week`,label:`Week`},{value:`month`,label:`Month`}],Ye=[{value:6,label:`6h`},{value:24,label:`24h`},{value:72,label:`3d`},{value:168,label:`7d`}],Xe=[{value:7,label:`7d`},{value:30,label:`30d`},{value:90,label:`90d`},{value:180,label:`6M`},{value:365,label:`1Y`}];function q({label:e,hint:t,required:n=!1,children:i,className:a,as:o=`label`}){let s=(0,K.jsxs)(K.Fragment,{children:[(0,K.jsxs)(`span`,{className:`flex items-baseline justify-between gap-3 text-xs font-medium text-foreground`,children:[(0,K.jsxs)(`span`,{children:[e,n?(0,K.jsxs)(`span`,{className:`text-foreground/40`,"aria-hidden":`true`,children:[` `,`*`]}):null]}),t?(0,K.jsx)(`span`,{className:`text-[11px] font-normal text-muted-foreground`,children:t}):null]}),i]});return o===`div`?(0,K.jsx)(`div`,{className:r(`grid gap-1.5`,a),children:s}):(0,K.jsx)(`label`,{className:r(`grid gap-1.5`,a),children:s})}function Ze({value:e,onChange:t,options:n,ariaLabel:i}){let a=(0,P.useId)();return(0,K.jsx)(`div`,{role:`radiogroup`,"aria-label":i,className:`inline-flex min-h-12 items-center rounded-md border border-border bg-card p-1`,children:n.map(n=>{let i=n.value===e;return(0,K.jsxs)(`label`,{className:r(`inline-flex min-h-10 min-w-10 cursor-pointer items-center justify-center rounded-sm px-2.5 text-xs font-medium tabular-nums transition-[background-color,color,transform,scale] duration-150 ease-out active:scale-[0.96] focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-1 focus-within:ring-offset-card`,i?`bg-foreground text-background`:`text-muted-foreground hover:text-foreground`),children:[(0,K.jsx)(`input`,{type:`radio`,name:a,value:n.value,checked:i,onChange:()=>t(n.value),className:`sr-only`}),n.label]},n.value)})})}function Qe({value:e,onChange:t,options:n,placeholder:r,ariaLabel:i}){return(0,K.jsxs)(v,{"aria-label":i,value:e??``,size:`sm`,onChange:e=>t(e.target.value||void 0),children:[r?(0,K.jsx)(`option`,{value:``,disabled:!0,hidden:!0,children:r}):null,n.map(e=>(0,K.jsx)(`option`,{value:e.value,children:e.label},e.value))]})}function $e({value:e,onChange:t,presets:n,suffix:i,min:a,max:o,step:s=1,placeholder:c}){let l=n.some(t=>t.value===e);return(0,K.jsxs)(`div`,{className:`grid gap-2`,children:[(0,K.jsx)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:n.map(n=>(0,K.jsx)(`button`,{type:`button`,onClick:()=>t(n.value),className:r(`inline-flex min-h-10 items-center rounded-full border px-2.5 text-xs font-medium tabular-nums transition-[background-color,border-color,color,transform,scale] duration-150 ease-out active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,n.value===e?`border-foreground bg-foreground text-background`:`border-border bg-card text-muted-foreground hover:border-border hover:text-foreground`),children:n.label},String(n.value)))}),(0,K.jsxs)(`div`,{className:`relative w-32`,children:[(0,K.jsx)(_,{type:`number`,inputMode:`numeric`,value:l?``:e??``,min:a,max:o,step:s,placeholder:c??`Custom`,onChange:e=>{t(e.target.value===``?void 0:Number(e.target.value))},className:`h-8 pr-8 text-xs tabular-nums`}),i?(0,K.jsx)(`span`,{className:`pointer-events-none absolute right-2 top-1/2 -translate-y-1/2 text-[11px] text-muted-foreground`,children:i}):null]})]})}function et({value:e,onChange:t,lookup:n,placeholder:r=`AAPL`,ariaLabel:i}){let[a,o]=(0,P.useState)(!1),[s,c]=(0,P.useState)({query:``,items:[]}),[l,u]=(0,P.useState)(``),d=(0,P.useRef)(null),f=String(e||``).trim(),p=s.query===f?s.items:[],m=l===f&&f.length>0;return(0,P.useEffect)(()=>{if(n&&!(f.length<1))return d.current&&clearTimeout(d.current),d.current=setTimeout(async()=>{u(f);try{let e=await n(f);c({query:f,items:e.slice(0,6)})}catch{c({query:f,items:[]})}finally{u(e=>e===f?``:e)}},180),()=>{d.current&&clearTimeout(d.current)}},[f,n]),(0,K.jsxs)(`div`,{className:`relative`,children:[(0,K.jsx)(_,{"aria-label":i,value:e??``,placeholder:r,onChange:e=>t(e.target.value.toUpperCase()),onFocus:()=>o(!0),onBlur:()=>setTimeout(()=>o(!1),120),className:`h-9 tabular-nums`,autoCapitalize:`characters`}),a&&p.length>0?(0,K.jsx)(`div`,{className:`absolute left-0 right-0 top-full z-20 mt-1 max-h-60 overflow-auto rounded-md border border-border bg-card shadow-subtle-sm`,children:p.map(e=>(0,K.jsxs)(`button`,{type:`button`,onMouseDown:e=>e.preventDefault(),onClick:()=>{t(e.symbol),o(!1)},className:`flex min-h-10 w-full items-center justify-between gap-3 rounded-md px-3 py-2 text-left text-sm transition-[background-color,transform,scale] duration-150 ease-out hover:bg-secondary active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:[(0,K.jsx)(`span`,{className:`font-medium tabular-nums text-foreground`,children:e.symbol}),(0,K.jsx)(`span`,{className:`truncate text-xs text-muted-foreground`,children:e.name})]},e.symbol))}):null,m?(0,K.jsx)(`span`,{className:`absolute right-3 top-1/2 -translate-y-1/2 text-[10px] uppercase tracking-wider text-muted-foreground`,children:`…`}):null]})}function tt({value:e=[],onChange:t,placeholder:n=`Add ticker`,min:r,max:i,ariaLabel:s=`Ticker symbols`}){let[c,l]=(0,P.useState)(``),u=i!=null&&e.length>=i,d=()=>{let n=c.trim().toUpperCase();if(n){if(e.includes(n)){l(``);return}u||(t([...e,n]),l(``))}},p=n=>t(e.filter(e=>e!==n));return(0,K.jsxs)(`div`,{children:[(0,K.jsxs)(`div`,{className:`flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border border-border bg-card px-2 py-1.5 focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 focus-within:ring-offset-background`,children:[e.map(e=>(0,K.jsxs)(`span`,{className:`inline-flex min-h-10 items-center gap-1 rounded-md border border-border bg-secondary pl-2 text-xs font-medium tabular-nums text-foreground`,children:[e,(0,K.jsx)(`button`,{type:`button`,"aria-label":`Remove ${e}`,onClick:()=>p(e),className:`inline-flex size-10 items-center justify-center rounded-md text-muted-foreground transition-[color,transform,scale] duration-150 ease-out hover:text-foreground active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:(0,K.jsx)(a,{className:`h-3 w-3`})})]},e)),(0,K.jsx)(`input`,{"aria-label":s,value:c,onChange:e=>l(e.target.value.toUpperCase()),onKeyDown:n=>{n.key===`Enter`||n.key===`,`?(n.preventDefault(),d()):n.key===`Backspace`&&!c&&e.length>0&&(n.preventDefault(),t(e.slice(0,-1)))},placeholder:e.length===0?n:``,disabled:u,className:`min-w-[80px] flex-1 bg-transparent py-1 text-xs tabular-nums text-foreground outline-none placeholder:text-muted-foreground disabled:opacity-40`,autoCapitalize:`characters`}),c.trim()?(0,K.jsx)(f,{type:`button`,variant:`ghost`,size:`icon-xs`,"aria-label":`Add ticker`,onClick:d,children:(0,K.jsx)(o,{})}):null]}),r!=null&&e.length<r?(0,K.jsxs)(`p`,{className:`mt-1 text-[11px] text-muted-foreground`,children:[`Add at least `,r,` symbol`,r===1?``:`s`,`.`]}):null,i==null?null:(0,K.jsxs)(`p`,{className:`mt-1 text-[11px] text-muted-foreground tabular-nums`,children:[e.length,`/`,i]})]})}function nt({value:e=[],onChange:t,options:n}){let i=n=>{e.includes(n)?t(e.filter(e=>e!==n)):t([...e,n])};return(0,K.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:n.map(t=>{let n=e.includes(t.value);return(0,K.jsxs)(`button`,{type:`button`,onClick:()=>i(t.value),className:r(`inline-flex min-h-10 items-center gap-1 rounded-full border px-2.5 text-xs font-medium transition-[background-color,border-color,color,transform,scale] duration-150 ease-out active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,n?`border-foreground bg-foreground text-background`:`border-border bg-card text-muted-foreground hover:text-foreground`),children:[n?(0,K.jsx)(y,{className:`h-3 w-3`,"aria-hidden":`true`}):null,t.label]},t.value)})})}function rt({value:e,onChange:t,min:n,max:r,placeholder:i=`YYYY-MM-DD`}){return(0,K.jsx)(_,{type:`date`,value:e??``,min:n,max:r,placeholder:i,onChange:e=>t(e.target.value||void 0),className:`h-9 tabular-nums`})}function it({value:e,onChange:t,placeholder:n,rows:r=3,maxLength:i,ariaLabel:a=`Text input`}){return(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`textarea`,{"aria-label":a,value:e??``,onChange:e=>t(e.target.value),placeholder:n,maxLength:i,rows:r,className:`block w-full resize-y rounded-md border border-border bg-card px-3 py-2 text-sm text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background`}),i?(0,K.jsxs)(`div`,{className:`mt-1 text-right text-[11px] tabular-nums text-muted-foreground`,children:[(e||``).length,`/`,i]}):null]})}function at({value:e,onChange:t,currency:n=`USD`,min:r=0,placeholder:i=`0`}){let[a,o]=(0,P.useState)(!1),[s,c]=(0,P.useState)(J(e,!1));(0,P.useEffect)(()=>{a||c(J(e,!1))},[e,a]);let l=ot(n),u=e=>{if(o(!1),!e?.replace(/[^0-9.]/g,``)){t(void 0),c(``);return}let n=Number(e.replace(/[^0-9.]/g,``));Number.isFinite(n)&&(t(n),c(J(n,!1)))};return(0,K.jsxs)(`div`,{className:`relative`,children:[(0,K.jsx)(`span`,{className:`pointer-events-none absolute left-3 top-1/2 -translate-y-1/2 text-sm text-muted-foreground`,children:l}),(0,K.jsx)(_,{value:a?s:J(e,!1),inputMode:`decimal`,placeholder:i,onChange:e=>c(e.target.value.replace(/[^0-9.]/g,``)),onFocus:()=>{o(!0),c(e==null?``:String(e))},onBlur:e=>u(e.target.value),min:r,className:`h-9 pl-7 tabular-nums`})]})}function J(e,t){if(e==null||e===``)return``;let n=Number(e);return Number.isFinite(n)?t?String(n):n.toLocaleString(`en-US`):String(e)}function ot(e){return!e||e===`USD`||e===`CAD`||e===`AUD`?`$`:e===`EUR`?`€`:e===`GBP`?`£`:e===`JPY`?`¥`:e}function st({value:e,onChange:t,min:n,max:r,step:i=.5,placeholder:a}){return(0,K.jsxs)(`div`,{className:`relative`,children:[(0,K.jsx)(_,{type:`number`,inputMode:`decimal`,value:e==null||e===``?``:String(Number((Number(e)*100).toFixed(4))),placeholder:a,min:n,max:r,step:i,onChange:e=>{let n=e.target.value;if(n===``){t(void 0);return}let r=Number(n);Number.isFinite(r)&&t(r/100)},className:`h-9 pr-7 tabular-nums`}),(0,K.jsx)(`span`,{className:`pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 text-sm text-muted-foreground`,children:`%`})]})}function ct({suggestions:e,onPick:t,label:n=`Suggestions`}){return e?.length?(0,K.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,K.jsx)(`span`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`,children:n}),(0,K.jsx)(`div`,{className:`flex flex-wrap gap-1.5`,children:e.map(e=>(0,K.jsx)(`button`,{type:`button`,onClick:()=>t(e.value||e.label),className:`inline-flex min-h-10 items-center rounded-full border border-border bg-card px-2.5 text-xs font-medium text-muted-foreground transition-[background-color,border-color,color,transform,scale] duration-150 ease-out hover:text-foreground active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:e.label},e.value||e.label))})]}):null}var lt={DAYS_PRESETS:Xe,HOURS_PRESETS:Ye,RANGE_OPTIONS:Ke,PERIOD_OPTIONS:qe,FRESHNESS_OPTIONS:Je};function Y(e){return typeof e==`string`?lt[e]??[]:e??[]}function ut({field:e,value:t,onChange:n,lookupSymbol:r}){let i=t=>n(e.name,t);switch(e.kind){case`symbol`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(et,{value:t,onChange:i,lookup:r,placeholder:e.placeholder,ariaLabel:e.label})});case`symbols`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(tt,{value:t||[],onChange:i,min:e.min,max:e.max,placeholder:e.placeholder,ariaLabel:e.label})});case`segmented`:return(0,K.jsx)(q,{as:`div`,label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(Ze,{value:t,onChange:i,options:Y(e.options),ariaLabel:e.label})});case`select`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(Qe,{value:t,onChange:i,options:Y(e.options),placeholder:e.placeholder,ariaLabel:e.label})});case`number-chips`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)($e,{value:t,onChange:i,presets:Y(e.presets),suffix:e.suffix,min:e.min,max:e.max,step:e.step,placeholder:e.placeholder})});case`multi-chips`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(nt,{value:t||[],onChange:i,options:Y(e.options)})});case`date`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(rt,{value:t,onChange:i,min:e.min,max:e.max})});case`freetext`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(it,{value:t,onChange:i,placeholder:e.placeholder,maxLength:e.maxLength,rows:e.rows,ariaLabel:e.label})});case`money`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(at,{value:t,onChange:i,currency:e.currency,placeholder:e.placeholder})});case`percent`:return(0,K.jsx)(q,{label:e.label,hint:e.helper,required:e.required,children:(0,K.jsx)(st,{value:t,onChange:i,min:e.min,max:e.max,step:e.step,placeholder:e.placeholder})});default:return(0,K.jsxs)(q,{label:e.label,hint:e.helper,required:e.required,children:[(0,K.jsx)(_,{value:t??``,placeholder:e.placeholder,onChange:e=>i(e.target.value),className:`h-9`}),e.suggestions?.length?(0,K.jsx)(`div`,{className:`mt-2`,children:(0,K.jsx)(ct,{suggestions:e.suggestions,onPick:i,label:`Try`})}):null]})}}function dt(e){let t={};for(let n of e)n.default!==void 0&&(t[n.name]=n.default);return t}function ft(e,t){let n=[];for(let r of e){let e=t[r.name];if(r.parse===`json`&&typeof e==`string`&&e.trim()!==``)try{JSON.parse(e)}catch{n.push(`${r.label} must be valid JSON.`)}if(r.required){if(e==null||e===``){n.push(`${r.label} is required.`);continue}Array.isArray(e)&&(e.length===0?n.push(`${r.label} is required.`):r.min!=null&&e.length<r.min&&n.push(`${r.label} needs at least ${r.min} entr${r.min===1?`y`:`ies`}.`))}}return n}var pt={},mt={market:`Market`,fundamentals:`Fundamentals`,options:`Options`,portfolio:`Portfolio`,technical:`Technical`,sentiment:`Sentiment`,macro:`Macro`,interaction:`Interaction`},ht=5,gt=80;function _t(e){let t=e.parameters?.properties||{},n=e.parameters?.required||[],r=pt[e.name]||{};return Object.entries(t).map(([e,t])=>({...yt(e,t,n.includes(e)),...r[e]||{}}))}function vt(e,t){if(!(t==null||t===``)){if(e.parse===`csv`&&typeof t==`string`){let e=t.split(`,`).map(e=>e.trim()).filter(Boolean);return e.length>0?e:void 0}if(e.parse===`json`&&typeof t==`string`)try{return JSON.parse(t)}catch{return}return t}}function yt(e,t,n){let r=bt(t),i={name:e,label:wt(e),helper:Tt(r.description),placeholder:r.examples?.[0],required:n,...r.default===void 0?{}:{default:r.default}},a=xt(r);if(a){let e=a.length<=ht?`segmented`:`select`;return{...i,kind:e,...e===`select`&&r.default===void 0?{placeholder:n?`Select ${i.label}`:`Use tool default`}:{},options:a}}if(r.type===`boolean`)return{...i,kind:`segmented`,options:[{value:!0,label:`Yes`},{value:!1,label:`No`}]};if(r.type===`number`||r.type===`integer`)return Ct(e,r)?{...i,kind:`percent`,step:.5}:{...i,kind:`number-chips`,min:r.minimum,max:r.maximum,step:r.type===`integer`?1:void 0};if(r.type===`array`){if(/symbol/i.test(e))return{...i,kind:`symbols`,min:r.minItems,max:r.maxItems};let t=xt(r.items||{});return t?{...i,kind:`multi-chips`,options:t}:r.items?.type===`object`?{...i,kind:`text`,parse:`json`,helper:i.helper||`JSON array`,placeholder:i.placeholder??`[]`}:{...i,kind:`text`,parse:`csv`,helper:i.helper||`Comma-separated values`}}return r.type===`object`?{...i,kind:`text`,parse:`json`,helper:i.helper||`JSON object`,placeholder:i.placeholder??`{}`}:e===`symbol`&&(r.type===`string`||r.type==null)?{...i,kind:`symbol`,placeholder:i.placeholder??`AAPL`}:{...i,kind:`text`}}function bt(e){let t=Array.isArray(e.anyOf)?e.anyOf:Array.isArray(e.oneOf)?e.oneOf:null;if(!t)return e;let n=t.filter(e=>e?.type!==`null`);if(n.length!==1||n.length===t.length)return e;let[r]=n;return{...r,description:e.description??r.description,examples:e.examples??r.examples,default:e.default??r.default}}function xt(e){let t=Array.isArray(e.enum)?e.enum:Array.isArray(e.anyOf)&&e.anyOf.every(e=>`const`in e)?e.anyOf.map(e=>e.const):null;return!t||t.length===0?null:t.map(e=>({value:e,label:St(e)}))}function St(e){return String(e).replace(/_/g,` `)}function Ct(e,t){let n=String(t.description||``);return/rate|growth/i.test(e)&&/decimal|0\.\d+\s+for\s+\d+%/i.test(n)}function wt(e){return e.replace(/_/g,` `).replace(/\b\w/g,e=>e.toUpperCase())}function Tt(e){let t=String(e||``);if(t)return t.length>gt?`${t.slice(0,gt)}…`:t}var Et={comprehensive_analysis:{headline:`Comprehensive analysis`,description:`Run market, fundamentals, technical, sentiment, and macro analysts on one ticker, then synthesize.`,fields:[{name:`symbol`,kind:`symbol`,label:`Symbol`,required:!0,default:`NVDA`},{name:`depth`,kind:`segmented`,label:`Depth`,default:`standard`,options:[{value:`fast`,label:`Fast`},{value:`standard`,label:`Standard`},{value:`deep`,label:`Deep`}],helper:`Fast: market + fundamentals only. Deep: includes options + macro.`}],buildPrompt:e=>{let t=e.depth&&e.depth!==`standard`?` (${e.depth} depth)`:``;return`/analyze ${e.symbol}${t}`}},portfolio_builder:{headline:`Portfolio builder`,description:`Build a draft portfolio from goals and constraints. The agent will fetch candidates, check correlation, and present an allocation table.`,fields:[{name:`objective`,kind:`freetext`,label:`Objective`,required:!0,placeholder:`Long-term growth with US tech exposure`,maxLength:200,helper:`One or two sentences describing what the portfolio is for.`},{name:`budget`,kind:`money`,label:`Budget`,default:1e5,helper:`Total amount to allocate.`},{name:`riskProfile`,kind:`segmented`,label:`Risk profile`,default:`balanced`,options:[{value:`conservative`,label:`Conservative`},{value:`balanced`,label:`Balanced`},{value:`aggressive`,label:`Aggressive`}]},{name:`timeHorizon`,kind:`segmented`,label:`Time horizon`,default:`5y`,options:[{value:`1y`,label:`1Y`},{value:`3y`,label:`3Y`},{value:`5y`,label:`5Y`},{value:`10y`,label:`10Y+`}]},{name:`assetScope`,kind:`segmented`,label:`Asset scope`,default:`stocks`,options:[{value:`stocks`,label:`Stocks`},{value:`stocks_etfs`,label:`Stocks + ETFs`},{value:`stocks_crypto`,label:`Stocks + Crypto`}]},{name:`positionCount`,kind:`number-chips`,label:`Positions`,default:8,presets:[{value:5,label:`5`},{value:8,label:`8`},{value:12,label:`12`},{value:20,label:`20`}]},{name:`maxSinglePositionPct`,kind:`percent`,label:`Max single position`,default:.15,helper:`Concentration cap, e.g. 15%.`},{name:`excludeSectors`,kind:`multi-chips`,label:`Exclude sectors`,advanced:!0,options:[{value:`energy`,label:`Energy`},{value:`financials`,label:`Financials`},{value:`consumer_discretionary`,label:`Consumer Discr.`},{value:`healthcare`,label:`Healthcare`},{value:`tech`,label:`Technology`},{value:`real_estate`,label:`Real Estate`},{value:`utilities`,label:`Utilities`}]},{name:`incomeVsGrowth`,kind:`segmented`,label:`Tilt`,advanced:!0,options:[{value:`income`,label:`Income`},{value:`balanced`,label:`Balanced`},{value:`growth`,label:`Growth`}]}],buildPrompt:e=>{let t=[`${At(e.budget)} budget`,e.riskProfile&&`${e.riskProfile} risk`,e.timeHorizon&&`${e.timeHorizon} horizon`,e.assetScope&&Dt(e.assetScope),e.positionCount&&`${e.positionCount} positions`,e.maxSinglePositionPct!=null&&`max ${(e.maxSinglePositionPct*100).toFixed(0)}% per position`,e.incomeVsGrowth&&`${e.incomeVsGrowth} tilt`,e.excludeSectors?.length&&`exclude ${e.excludeSectors.join(`, `)}`].filter(Boolean).join(`, `);return`Build me a portfolio for ${String(e.objective||``).trim()}. Constraints: ${t}.`}},options_screener:{headline:`Options screener`,description:`Pick contracts from a single ticker's chain that match your direction, DTE, and liquidity preferences.`,fields:[{name:`symbol`,kind:`symbol`,label:`Underlying`,required:!0,default:`NVDA`},{name:`direction`,kind:`segmented`,label:`Direction`,required:!0,default:`bullish`,options:[{value:`bullish`,label:`Bullish (calls)`},{value:`bearish`,label:`Bearish (puts)`}]},{name:`dteTarget`,kind:`segmented`,label:`Days to expiry`,required:!0,default:`30-45`,options:[{value:`0-7`,label:`0–7`},{value:`14-30`,label:`14–30`},{value:`30-45`,label:`30–45`},{value:`45-90`,label:`45–90`},{value:`90+`,label:`90+`}]},{name:`moneynessPreference`,kind:`segmented`,label:`Moneyness`,required:!0,default:`atm`,options:[{value:`itm`,label:`ITM`},{value:`atm`,label:`ATM`},{value:`otm`,label:`OTM`}]},{name:`liquidityMinimum`,kind:`segmented`,label:`Liquidity floor`,required:!0,default:`tight_spreads`,options:[{value:`any`,label:`Any`},{value:`tight_spreads`,label:`Tight spreads`},{value:`high_oi`,label:`High open interest`}]},{name:`objective`,kind:`select`,label:`Objective`,required:!0,default:`directional_leverage`,options:[{value:`directional_leverage`,label:`Directional leverage`},{value:`hedge`,label:`Hedge existing position`},{value:`income`,label:`Income (sell premium)`},{value:`speculative`,label:`Speculative (cheap convexity)`}]},{name:`maxPremium`,kind:`money`,label:`Max premium per contract`,advanced:!0},{name:`ivPreference`,kind:`segmented`,label:`IV preference`,advanced:!0,options:[{value:`any`,label:`Any`},{value:`low`,label:`Low IV`},{value:`high`,label:`High IV`}]}],buildPrompt:e=>{let t=[e.dteTarget&&`DTE ${e.dteTarget}`,e.moneynessPreference&&`${e.moneynessPreference.toUpperCase()} strikes`,e.liquidityMinimum&&Ot(e.liquidityMinimum),e.objective&&kt(e.objective),e.maxPremium!=null&&`max premium ${At(e.maxPremium)}`,e.ivPreference&&e.ivPreference!==`any`&&`${e.ivPreference} IV`].filter(Boolean).join(`, `);return`Screen options for ${e.symbol} (${e.direction||`bullish`}). ${t?`Filters: ${t}.`:``}`.trim()}},compare_assets:{headline:`Compare assets`,description:`Side-by-side comparison of two or more tickers across price, technicals, fundamentals, and risk.`,fields:[{name:`symbols`,kind:`symbols`,label:`Tickers`,required:!0,min:2,max:6,default:[`NVDA`,`AMD`],helper:`2 to 6 symbols.`},{name:`metrics`,kind:`multi-chips`,label:`Focus on`,advanced:!0,options:[{value:`valuation`,label:`Valuation`},{value:`growth`,label:`Growth`},{value:`profitability`,label:`Profitability`},{value:`momentum`,label:`Momentum`},{value:`risk`,label:`Risk`}]}],buildPrompt:e=>`Compare ${(e.symbols||[]).join(` vs `)} side by side.${e.metrics?.length?` Focus on ${e.metrics.join(`, `)}.`:``}`}};function Dt(e){return e===`stocks_etfs`?`stocks and ETFs`:e===`stocks_crypto`?`stocks and crypto`:`stocks only`}function Ot(e){return e===`tight_spreads`?`tight bid-ask spreads`:e===`high_oi`?`high open interest`:`any liquidity`}function kt(e){return e===`directional_leverage`?`directional leverage`:e===`hedge`?`hedge an existing position`:e===`income`?`income via short premium`:e===`speculative`?`speculative cheap convexity`:e}function At(e){if(e==null)return``;let t=Number(e);return Number.isFinite(t)?`$${t.toLocaleString(`en-US`)}`:String(e)}function jt(e){return Et[e]??null}var Mt=[{id:`workflows`,label:`Workflows`,icon:M},{id:`tools`,label:`Tools`,icon:S},{id:`providers`,label:`Providers`,icon:A}],Nt=`workflows`;function Pt({open:e,initialTab:t,initialProviderId:n,catalog:r,onClose:i,send:a,setToast:o,startChatRun:s,fillComposer:c,sessionId:l}){let u=t??Nt,d=n?{kind:`provider`,id:n}:null,f=e?`open:${u}:${n||``}`:`closed`,[p,m]=(0,P.useState)(f),[g,_]=(0,P.useState)(u),[v,y]=(0,P.useState)(``),[b,x]=(0,P.useState)(null),S=(0,P.useRef)(null);p!==f&&(m(f),e&&(_(u),y(``),x(d))),(0,P.useEffect)(()=>{S.current&&(S.current.scrollTop=0)},[b,g]);let C=(0,P.useCallback)(()=>{x(null),y(``),i()},[i]);return(0,K.jsx)(h,{open:e,onOpenChange:e=>{e||C()},children:(0,K.jsx)(ee,{width:`xl`,handleLabel:`Catalog`,className:`!h-[min(34rem,calc(100dvh-2rem))] p-0 md:!h-[min(34rem,calc(100dvh-2rem))]`,children:b?(0,K.jsxs)(`div`,{className:`grid min-h-0 flex-1 grid-rows-[auto_minmax(0,1fr)]`,children:[(0,K.jsx)(Ut,{selection:b,catalog:r,onBack:()=>x(null)}),(0,K.jsx)(`div`,{ref:S,className:`min-h-0 overflow-y-auto overscroll-contain`,children:(0,K.jsx)(Wt,{selection:b,catalog:r,send:a,setToast:o,startChatRun:s,fillComposer:c,onClose:C,lookupSymbol:void 0,sessionId:l})})]}):(0,K.jsx)(Lt,{tab:g,setTab:_,query:v,setQuery:y,catalog:r,onSelect:e=>x(e),bodyRef:S})})})}function Ft({tab:e,setTab:t,query:n,setQuery:i,counts:o}){return(0,K.jsxs)(`div`,{className:`border-b border-border`,children:[(0,K.jsx)(`div`,{className:`px-3 pt-2 sm:px-4`,children:(0,K.jsx)(`div`,{className:`flex min-h-12 w-full items-center gap-0.5 rounded-md bg-secondary p-1`,children:Mt.map(n=>{let i=n.icon,a=e===n.id;return(0,K.jsxs)(`button`,{type:`button`,onClick:()=>t(n.id),"aria-pressed":a,className:r(`inline-flex min-h-10 min-w-0 flex-1 items-center justify-center gap-1.5 rounded-sm px-2 text-xs font-medium transition-[background-color,color,box-shadow,transform,scale] duration-150 ease-out active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,a?`bg-card text-foreground shadow-subtle-xs`:`text-muted-foreground hover:text-foreground`),children:[(0,K.jsx)(i,{className:`hidden h-3.5 w-3.5 sm:inline`,"aria-hidden":`true`}),(0,K.jsx)(`span`,{className:`truncate`,children:n.label}),(0,K.jsx)(`span`,{className:r(`hidden rounded-full px-1.5 text-[10px] tabular-nums sm:inline`,a?`bg-secondary text-muted-foreground`:`text-muted-foreground/70`),children:o[n.id]??0})]},n.id)})})}),(0,K.jsxs)(`div`,{className:`relative`,children:[(0,K.jsx)(Ve,{value:n,onValueChange:i,placeholder:It(e),autoFocus:!0,className:`h-8 pr-8 text-sm`}),n?(0,K.jsx)(f,{variant:`ghost`,size:`icon-xs`,"aria-label":`Clear search`,onClick:()=>i(``),className:`absolute right-3 top-1/2 -translate-y-1/2`,children:(0,K.jsx)(a,{})}):null]})]})}function It(e){return e===`workflows`?`Search workflows`:e===`providers`?`Search providers`:`Search tools by name, label, or domain`}function Lt({tab:e,setTab:t=()=>{},query:n,setQuery:r=()=>{},catalog:i,onSelect:a,bodyRef:o}){return(0,K.jsxs)(Be,{shouldFilter:!1,className:`h-full min-h-0 flex-1 rounded-none`,children:[(0,K.jsx)(Ft,{tab:e,setTab:t,query:n,setQuery:r,counts:{workflows:i?.workflows?.length??0,tools:i?.tools?.length??0,providers:i?.providers?.length??0}}),(0,K.jsx)(He,{ref:o,className:`min-h-0 !max-h-none flex-1 overscroll-contain`,children:(0,K.jsx)(Rt,{tab:e,query:n,catalog:i,onSelect:a})}),(0,K.jsxs)(`fieldset`,{className:`flex min-h-10 shrink-0 items-center justify-center gap-2 border-t border-border px-3 text-[11px] text-muted-foreground`,"aria-label":`Catalog keyboard shortcuts`,children:[(0,K.jsx)(b,{children:`↑↓`}),(0,K.jsx)(`span`,{children:`navigate`}),(0,K.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,K.jsx)(b,{children:`↵`}),(0,K.jsx)(`span`,{children:`run`}),(0,K.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,K.jsx)(b,{children:`esc`})]})]})}function Rt({tab:e,query:t,catalog:n,onSelect:i}){if(e===`workflows`){let e=ln(n?.workflows??[],t);return e.length===0?(0,K.jsx)(Ue,{children:(0,K.jsx)(Ht,{query:t,kind:`workflows`})}):(0,K.jsx)(`div`,{className:`grid divide-y divide-border`,children:e.map(e=>(0,K.jsx)(zt,{workflow:e,onSelect:i},e.id))})}if(e===`providers`){let e=un(n?.providers??[],t);return e.length===0?(0,K.jsx)(Ue,{children:(0,K.jsx)(Ht,{query:t,kind:`providers`})}):(0,K.jsx)(`div`,{className:`grid divide-y divide-border`,children:e.map(e=>(0,K.jsx)(Vt,{provider:e,onSelect:i},e.id))})}let a=cn(n?.tools??[],t);if(a.length===0)return(0,K.jsx)(Ue,{children:(0,K.jsx)(Ht,{query:t,kind:`tools`})});let o=dn(a,e=>e.domain??`tool`),s=[`market`,`fundamentals`,`options`,`portfolio`,`technical`,`sentiment`,`macro`,`interaction`];return(0,K.jsx)(`div`,{className:`grid`,children:[...o.keys()].sort((e,t)=>{let n=s.indexOf(e),r=s.indexOf(t);return(n===-1?999:n)-(r===-1?999:r)}).map((e,t)=>(0,K.jsx)(We,{heading:mt[e]??e,className:r(`divide-y divide-border border-y border-border p-0 [&_[cmdk-group-heading]]:px-4 [&_[cmdk-group-heading]]:pb-1 [&_[cmdk-group-heading]]:pt-3 [&_[cmdk-group-heading]]:text-[11px] [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-[0.08em]`,t===0?``:`mt-2`),children:o.get(e).map(e=>(0,K.jsx)(Bt,{tool:e,onSelect:i},e.name))},e))})}function zt({workflow:e,onSelect:t}){return(0,K.jsxs)(Ge,{value:`workflow:${e.id}`,onSelect:()=>t({kind:`workflow`,id:e.id}),className:`group w-full items-start gap-3 rounded-none px-4 py-3 text-left hover:bg-secondary`,children:[(0,K.jsx)(M,{"aria-hidden":`true`,className:`mt-0.5 h-4 w-4 shrink-0 text-foreground`}),(0,K.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,K.jsx)(`div`,{className:`flex items-center gap-2`,children:(0,K.jsx)(`span`,{className:`text-sm font-semibold text-foreground`,children:e.name})}),(0,K.jsx)(`p`,{className:`mt-0.5 line-clamp-2 text-xs text-muted-foreground`,children:e.description})]}),(0,K.jsx)(T,{"aria-hidden":`true`,className:`mt-1 h-4 w-4 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100`})]})}function Bt({tool:e,onSelect:t}){let n=e.enabled===!1;return(0,K.jsxs)(Ge,{value:`tool:${e.name}`,onSelect:()=>t({kind:`tool`,id:e.name}),className:r(`group w-full items-start gap-3 rounded-none px-4 py-2.5 text-left hover:bg-secondary`,n&&`opacity-60`),children:[(0,K.jsx)(S,{"aria-hidden":`true`,className:`mt-0.5 h-3.5 w-3.5 shrink-0 text-muted-foreground`}),(0,K.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(`span`,{className:`text-sm font-medium text-foreground`,children:e.label||tn(e.name)}),(0,K.jsx)(`code`,{className:`hidden truncate text-[11px] tabular-nums text-muted-foreground/70 sm:inline`,children:e.name}),n?(0,K.jsx)(C,{variant:`outline`,className:`h-5 px-1.5 text-[10px]`,children:`disabled`}):null]}),(0,K.jsx)(`p`,{className:`mt-0.5 line-clamp-1 text-xs text-muted-foreground`,children:e.description})]}),(0,K.jsx)(T,{"aria-hidden":`true`,className:`mt-1 h-4 w-4 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100`})]})}function Vt({provider:e,onSelect:t}){let n=X(e),i=fn(e);return(0,K.jsxs)(Ge,{value:`provider:${e.id}`,onSelect:()=>t({kind:`provider`,id:e.id}),className:`group w-full items-start gap-3 rounded-none px-4 py-3 text-left hover:bg-secondary`,children:[(0,K.jsx)(i,{"aria-hidden":`true`,className:`mt-0.5 h-4 w-4 shrink-0 text-muted-foreground`}),(0,K.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(`span`,{className:`text-sm font-medium text-foreground`,children:e.displayName}),(0,K.jsx)(Z,{status:n}),(0,K.jsx)(`span`,{className:r(`text-[11px]`,$(n)),children:Q(n)})]}),(0,K.jsx)(`p`,{className:`mt-0.5 line-clamp-2 text-xs text-muted-foreground`,children:(e.unlocks||[]).join(` · `)})]}),(0,K.jsx)(T,{"aria-hidden":`true`,className:`mt-1 h-4 w-4 shrink-0 text-muted-foreground opacity-0 transition-opacity group-hover:opacity-100`})]})}function Ht({query:e,kind:t}){return(0,K.jsxs)(`div`,{className:`grid gap-2 p-12 text-center`,children:[(0,K.jsx)(p,{className:`mx-auto h-5 w-5 text-muted-foreground`,"aria-hidden":`true`}),(0,K.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:e?`No ${t} match "${e}"`:`No ${t} available`}),(0,K.jsx)(`p`,{className:`mx-auto max-w-xs text-xs text-muted-foreground`,children:e?`Try a shorter query or check spelling.`:`OpenCandle did not return entries for this section.`})]})}function Ut({selection:e,catalog:t,onBack:n}){let r=$t(e,t),i=e.kind===`provider`&&r?fn(r):A;return(0,K.jsxs)(`div`,{className:`flex items-center gap-2 border-b border-border px-3 py-2 sm:px-4`,children:[(0,K.jsx)(f,{variant:`ghost`,size:`icon-sm`,"aria-label":`Back to catalog`,onClick:n,children:(0,K.jsx)(E,{})}),(0,K.jsxs)(`div`,{className:`flex min-w-0 flex-1 items-center gap-2`,children:[e.kind===`workflow`?(0,K.jsx)(M,{className:`h-4 w-4 text-foreground`,"aria-hidden":`true`}):null,e.kind===`tool`?(0,K.jsx)(S,{className:`h-4 w-4 text-muted-foreground`,"aria-hidden":`true`}):null,e.kind===`provider`?(0,K.jsx)(i,{className:`h-4 w-4 text-muted-foreground`,"aria-hidden":`true`}):null,(0,K.jsx)(`h2`,{className:`truncate text-sm font-semibold text-foreground`,children:en(e,r)}),e.kind===`tool`&&r?.domain?(0,K.jsx)(C,{variant:`outline`,className:`hidden h-5 px-1.5 text-[10px] sm:inline-flex`,children:mt[r.domain]??r.domain}):null]})]})}function Wt({selection:e,catalog:t,send:n,setToast:r,startChatRun:i,fillComposer:a,onClose:o,lookupSymbol:s,sessionId:c}){let l=$t(e,t);return l?e.kind===`workflow`?(0,K.jsx)(Gt,{workflow:l,startChatRun:i,fillComposer:a,onClose:o,setToast:r,lookupSymbol:s,sessionId:c}):e.kind===`tool`?(0,K.jsx)(qt,{tool:l,send:n,startChatRun:i,fillComposer:a,onClose:o,setToast:r,lookupSymbol:s}):(0,K.jsx)(Jt,{provider:l,send:n,setToast:r}):(0,K.jsxs)(`div`,{className:`grid gap-2 p-12 text-center`,children:[(0,K.jsx)(`p`,{className:`text-sm font-medium text-foreground`,children:`Selection no longer available`}),(0,K.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:`The catalog refreshed while you were viewing this entry.`})]})}function Gt({workflow:e,startChatRun:t,fillComposer:n,onClose:i,setToast:a,lookupSymbol:o}){let s=jt(e.id),c=s?.fields??[],[l,u]=(0,P.useState)(()=>dt(c)),[d,p]=(0,P.useState)(!1),m=(0,P.useCallback)((e,t)=>u(n=>({...n,[e]:t})),[]),h=ft(c,l),g=(0,P.useMemo)(()=>s?sn(s,l):e.prompt||e.name,[s,l,e]),_=c.filter(e=>!e.advanced),v=c.filter(e=>e.advanced);if(!s)return(0,K.jsxs)(`div`,{className:`p-6`,children:[(0,K.jsxs)(`p`,{className:`text-sm text-muted-foreground`,children:[`No builder defined for "`,e.name,`". The agent will use its default planner.`]}),(0,K.jsx)(`div`,{className:`mt-4 flex gap-2`,children:(0,K.jsx)(f,{variant:`brand`,onClick:()=>{t(e.prompt||e.name),i()},children:`Run with defaults`})})]});let y=e=>{if(h.length>0){a?.(h[0]);return}if(e===`send`){t(g),i();return}n?.(g),a?.(`Draft loaded — edit and send when ready.`),i()};return(0,K.jsxs)(`div`,{className:`grid gap-5 px-4 py-4 sm:px-5`,children:[(0,K.jsx)(`p`,{className:`text-sm leading-5 text-muted-foreground`,children:s.description}),(0,K.jsx)(`div`,{className:`grid gap-3.5`,children:_.map(e=>(0,K.jsx)(ut,{field:e,value:l[e.name],onChange:m,lookupSymbol:o},e.name))}),v.length>0?(0,K.jsxs)(`div`,{className:`grid gap-3.5 border-t border-border pt-4`,children:[(0,K.jsxs)(`button`,{type:`button`,onClick:()=>p(e=>!e),className:`inline-flex min-h-10 w-fit items-center gap-1.5 rounded-md px-2 text-[11px] font-medium uppercase tracking-wider text-muted-foreground transition-[color,transform,scale] duration-150 ease-out hover:text-foreground active:scale-[0.96] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring`,children:[(0,K.jsxs)(`span`,{children:[d?`Hide`:`Show`,` advanced`]}),(0,K.jsx)(T,{"aria-hidden":`true`,className:r(`h-3 w-3 transition-transform`,d&&`rotate-90`)})]}),d?v.map(e=>(0,K.jsx)(ut,{field:e,value:l[e.name],onChange:m,lookupSymbol:o},e.name)):null]}):null,(0,K.jsx)(Qt,{prompt:g}),(0,K.jsxs)(`div`,{className:`sticky bottom-0 -mx-4 flex flex-wrap items-center justify-end gap-2 border-t border-border bg-card px-4 py-3 sm:-mx-5 sm:px-5`,children:[(0,K.jsx)(f,{variant:`bordered`,onClick:()=>y(`draft`),disabled:!g,children:`Edit in chat`}),(0,K.jsx)(f,{variant:`brand`,onClick:()=>y(`send`),disabled:!g,prefixIcon:j,children:`Run workflow`})]})]})}function Kt(e,t,n=``){return{toolName:e,args:t,...n?{sessionId:n}:{}}}function qt({tool:e,send:t,startChatRun:n,fillComposer:r,onClose:i,setToast:a,lookupSymbol:o,sessionId:s}){let c=(0,P.useMemo)(()=>_t(e),[e]),[l,u]=(0,P.useState)(()=>dt(c)),d=(0,P.useCallback)((e,t)=>u(n=>({...n,[e]:t})),[]),p=ft(c,l),m=(0,P.useMemo)(()=>rn(nn(c,l)),[c,l]),h=(0,P.useMemo)(()=>`Use ${e.name}${an(m)}`,[e,m]),g=o=>{if(p.length>0){a?.(p[0]);return}if(o===`send`){n(h),i();return}if(o===`draft`){r?.(h),a?.(`Draft loaded — edit and send when ready.`),i();return}o===`run`&&t?.(`tool.invoke`,Kt(e.name,m,s))&&(a?.(`Running ${e.label||e.name}…`),i())};return(0,K.jsxs)(`div`,{className:`grid gap-5 px-4 py-4 sm:px-5`,children:[(0,K.jsx)(`p`,{className:`text-sm leading-5 text-muted-foreground`,children:e.description}),c.length===0?(0,K.jsx)(`div`,{className:`rounded-md border border-dashed border-border bg-secondary px-3 py-2.5 text-xs text-muted-foreground`,children:`This tool takes no inputs.`}):(0,K.jsx)(`div`,{className:`grid gap-3.5`,children:c.map(e=>(0,K.jsx)(ut,{field:e,value:l[e.name],onChange:d,lookupSymbol:o},e.name))}),(0,K.jsx)(Qt,{prompt:h,title:`Chat preview`}),(0,K.jsxs)(`div`,{className:`sticky bottom-0 -mx-4 flex flex-wrap items-center justify-end gap-2 border-t border-border bg-card px-4 py-3 sm:-mx-5 sm:px-5`,children:[(0,K.jsx)(f,{variant:`bordered`,size:`sm`,onClick:()=>g(`draft`),children:`Edit in chat`}),(0,K.jsx)(f,{variant:`brand`,size:`sm`,prefixIcon:j,onClick:()=>g(`run`),children:`Run now`})]})]})}function Jt({provider:e,send:t,setToast:n}){return e.kind===`external-tool`?(0,K.jsx)(Xt,{provider:e,send:t,setToast:n}):e.kind===`public-http`?(0,K.jsx)(Zt,{provider:e,send:t,setToast:n}):(0,K.jsx)(Yt,{provider:e,send:t,setToast:n})}function Yt({provider:e,send:t,setToast:n}){let i=`${e.id}:${e.status||``}`,[a,o]=(0,P.useState)(i),[s,c]=(0,P.useState)(``),[l,d]=(0,P.useState)(!1),p=X(e),m=p===`env`,h=s.trim(),g=!m&&h.length>0;a!==i&&(o(i),c(``),d(!1));let v=()=>{if(m){n?.(`${e.displayName} is set via ${e.envVar}. Unset it to override here.`);return}h&&(n?.(`Verifying ${e.displayName} key…`),t?.(`provider.save_api_key`,{providerId:e.id,apiKey:h})&&c(``))};return(0,K.jsxs)(`div`,{className:`grid gap-5 px-4 py-4 sm:px-5`,children:[(0,K.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,K.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,K.jsx)(Z,{status:p}),(0,K.jsx)(`span`,{className:r(`text-xs font-medium`,$(p)),children:Q(p)}),m?(0,K.jsxs)(`code`,{className:`text-[11px] text-muted-foreground`,children:[`env: `,e.envVar]}):null]}),(0,K.jsx)(`p`,{className:`text-sm leading-5 text-muted-foreground`,children:e.fallbackDescription?(0,K.jsxs)(K.Fragment,{children:[`If absent: `,e.fallbackDescription,`.`]}):(0,K.jsxs)(K.Fragment,{children:[`Required for: `,(e.unlocks||[]).join(`, `)||`this provider's tools`,`.`]})})]}),(0,K.jsxs)(`div`,{className:`grid gap-2`,children:[(0,K.jsx)(`span`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Unlocks`}),(0,K.jsx)(`ul`,{className:`grid gap-1`,children:(e.unlocks||[]).map(e=>(0,K.jsxs)(`li`,{className:`flex items-baseline gap-2 text-sm text-foreground`,children:[(0,K.jsx)(`span`,{"aria-hidden":`true`,className:`mt-1 h-1 w-1 rounded-full bg-foreground/40`}),(0,K.jsx)(`span`,{children:e})]},e))})]}),(0,K.jsxs)(`div`,{className:`grid gap-2`,children:[(0,K.jsx)(`label`,{htmlFor:`provider-api-key-${e.id}`,className:`text-xs font-medium text-foreground`,children:`API key`}),(0,K.jsxs)(`div`,{className:`relative`,children:[(0,K.jsx)(_,{id:`provider-api-key-${e.id}`,type:l?`text`:`password`,value:s,onChange:e=>c(e.target.value),placeholder:`Paste your ${e.displayName} key`,disabled:m,className:`pr-10 font-mono`,autoCapitalize:`none`,autoComplete:`off`,spellCheck:!1,onKeyDown:e=>{e.key===`Enter`&&g&&(e.preventDefault(),v())}}),(0,K.jsx)(f,{type:`button`,variant:`ghost`,size:`icon-xs`,className:`absolute right-1 top-1/2 -translate-y-1/2`,"aria-label":l?`Hide API key`:`Show API key`,tooltip:l?`Hide API key`:`Show API key`,onClick:()=>d(e=>!e),disabled:!s,children:l?(0,K.jsx)(k,{}):(0,K.jsx)(te,{})})]}),(0,K.jsx)(`p`,{className:`text-[11px] leading-4 text-muted-foreground`,children:m?`Currently set via ${e.envVar}. Unset that variable to manage the key here.`:p===`file`?`Saved to ~/.opencandle/config.json${e.maskedKeyHint?` (${e.maskedKeyHint})`:``}. Paste a new key to replace.`:e.instructionsHint||`Saved to ~/.opencandle/config.json.`})]}),(0,K.jsxs)(`div`,{className:`sticky bottom-0 -mx-4 flex flex-wrap items-center justify-end gap-2 border-t border-border bg-card px-4 py-3 sm:-mx-5 sm:px-5`,children:[e.signupUrl?(0,K.jsx)(f,{variant:`ghost`,size:`sm`,suffixIcon:u,onClick:()=>window.open(e.signupUrl,`_blank`,`noreferrer`),children:`Get a key`}):null,(0,K.jsx)(f,{variant:`brand`,size:`sm`,onClick:v,disabled:!g,children:p===`file`?`Replace key`:`Save key`})]})]})}function Xt({provider:e,send:t,setToast:n}){let i=X(e),a=e.statusDetail,o=i===`skipped`;return(0,K.jsxs)(`div`,{className:`grid gap-5 px-4 py-4 sm:px-5`,children:[(0,K.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,K.jsx)(Z,{status:i}),(0,K.jsx)(`span`,{className:r(`text-xs font-medium`,$(i)),children:Q(i)}),a?.checkedAt?(0,K.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[`Checked `,gn(a.checkedAt)]}):null]}),(0,K.jsx)(`p`,{className:`text-sm leading-5 text-muted-foreground`,children:e.fallbackDescription})]}),(0,K.jsxs)(`div`,{className:`grid gap-2`,children:[(0,K.jsx)(`span`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Install`}),(0,K.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 rounded-md border border-border bg-secondary px-3 py-2`,children:[(0,K.jsx)(N,{className:`h-3.5 w-3.5 shrink-0 text-muted-foreground`,"aria-hidden":`true`}),(0,K.jsx)(`code`,{className:`min-w-0 flex-1 overflow-x-auto whitespace-nowrap text-[11px] text-foreground`,children:e.installCmd}),(0,K.jsx)(f,{type:`button`,variant:`ghost`,size:`icon-xs`,"aria-label":`Copy install command`,tooltip:`Copy install command`,onClick:()=>{navigator.clipboard?.writeText?.(e.installCmd),n?.(`Install command copied.`)},children:(0,K.jsx)(D,{})})]})]}),(0,K.jsxs)(`div`,{className:`grid gap-2`,children:[(0,K.jsx)(`span`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Session source`}),(0,K.jsxs)(`p`,{className:`text-sm leading-5 text-muted-foreground`,children:[`Uses your normal browser session. Supported browsers:`,` `,(e.supportedBrowsers||[]).join(`, `)||`Chrome, Arc, Edge, Firefox, Brave`,`.`]}),a?.message?(0,K.jsx)(`p`,{className:`rounded-md border border-border bg-secondary px-3 py-2 text-xs leading-5 text-muted-foreground`,children:a.message}):null]}),(0,K.jsxs)(`div`,{className:`sticky bottom-0 -mx-4 flex flex-wrap items-center justify-end gap-2 border-t border-border bg-card px-4 py-3 sm:-mx-5 sm:px-5`,children:[(0,K.jsx)(f,{variant:`bordered`,size:`sm`,prefixIcon:s,onClick:()=>{n?.(o?`Re-enabling ${e.displayName} and checking install status...`:`Checking ${e.displayName} install status...`),t?.(`provider.status.check`,{providerId:e.id,mode:`install`,reenable:o})},children:o?`Re-enable & check install`:`Check install`}),(0,K.jsx)(f,{variant:`brand`,size:`sm`,onClick:()=>{n?.(o?`Re-enabling ${e.displayName} and checking session. This may read browser cookies and trigger a Keychain prompt.`:`Checking ${e.displayName} session. This may read browser cookies and trigger a Keychain prompt.`),t?.(`provider.status.check`,{providerId:e.id,mode:`session`,reenable:o})},children:o?`Re-enable & check session`:`Check session`})]})]})}function Zt({provider:e,send:t,setToast:n}){let i=X(e),a=e.statusDetail;return(0,K.jsxs)(`div`,{className:`grid gap-5 px-4 py-4 sm:px-5`,children:[(0,K.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,K.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,K.jsx)(Z,{status:i}),(0,K.jsx)(`span`,{className:r(`text-xs font-medium`,$(i)),children:Q(i)}),a?.checkedAt?(0,K.jsxs)(`span`,{className:`text-[11px] text-muted-foreground`,children:[`Checked `,gn(a.checkedAt)]}):null]}),(0,K.jsx)(`p`,{className:`text-sm leading-5 text-muted-foreground`,children:e.fallbackDescription||`No account or API key is required.`})]}),(0,K.jsxs)(`div`,{className:`grid gap-2`,children:[(0,K.jsx)(`span`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`,children:`Probe`}),(0,K.jsx)(`code`,{className:`overflow-x-auto rounded-md border border-border bg-secondary px-3 py-2 text-[11px] text-muted-foreground`,children:e.probeUrl}),a?.message?(0,K.jsx)(`p`,{className:`text-xs leading-5 text-muted-foreground`,children:a.message}):null]}),(0,K.jsx)(`div`,{className:`sticky bottom-0 -mx-4 flex flex-wrap items-center justify-end gap-2 border-t border-border bg-card px-4 py-3 sm:-mx-5 sm:px-5`,children:(0,K.jsx)(f,{variant:`brand`,size:`sm`,prefixIcon:s,onClick:()=>{n?.(`Checking ${e.displayName} reachability...`),t?.(`provider.status.check`,{providerId:e.id})},children:`Check reachability`})})]})}function Qt({prompt:e,title:t=`Chat prompt`}){return(0,K.jsxs)(`div`,{className:`grid gap-1.5`,children:[(0,K.jsx)(`span`,{className:`text-[11px] font-medium uppercase tracking-wider text-muted-foreground`,children:t}),(0,K.jsx)(`pre`,{className:`overflow-auto whitespace-pre-wrap rounded-md border border-border bg-secondary px-3 py-2 font-mono text-xs leading-5 text-foreground`,children:e||`Fill the required fields to preview the chat prompt.`})]})}function $t(e,t){return!e||!t?null:e.kind===`workflow`?t.workflows?.find(t=>t.id===e.id)??null:e.kind===`tool`?t.tools?.find(t=>t.name===e.id)??null:e.kind===`provider`?t.providers?.find(t=>t.id===e.id)??null:null}function en(e,t){return t?e.kind===`workflow`?t.name:e.kind===`tool`?t.label||tn(t.name):e.kind===`provider`?t.displayName:`Catalog`:`Catalog`}function tn(e){return String(e||``).replace(/^get_/,``).replace(/_/g,` `)}function nn(e,t){let n={};for(let r of e)n[r.name]=vt(r,t[r.name]);return n}function rn(e){let t={};for(let[n,r]of Object.entries(e))r===void 0||r===``||Array.isArray(r)&&r.length===0||(t[n]=r);return t}function an(e){let t=Object.entries(e);return t.length===0?``:` with ${t.map(([e,t])=>`${e}=${on(t)}`).join(`, `)}`}function on(e){return Array.isArray(e)?e.some(e=>typeof e==`object`&&!!e)?JSON.stringify(e):e.join(`,`):typeof e==`object`&&e||typeof e==`string`&&e.includes(` `)?JSON.stringify(e):String(e)}function sn(e,t){try{return e.buildPrompt(t)||``}catch{return``}}function cn(e,t){if(!t.trim())return e;let n=t.toLowerCase();return e.filter(e=>[e.name,e.label,e.description,e.domain].some(e=>String(e||``).toLowerCase().includes(n)))}function ln(e,t){if(!t.trim())return e;let n=t.toLowerCase();return e.filter(e=>[e.id,e.name,e.description].some(e=>String(e||``).toLowerCase().includes(n)))}function un(e,t){if(!t.trim())return e;let n=t.toLowerCase();return e.filter(e=>[e.id,e.kind,e.displayName,e.envVar,e.binary,e.installCmd,e.probeUrl,...e.aliases||[],...e.unlocks||[]].some(e=>String(e||``).toLowerCase().includes(n)))}function dn(e,t){let n=new Map;for(let r of e){let e=t(r);n.has(e)||n.set(e,[]),n.get(e).push(r)}return n}function X(e){return e.statusDetail?.state??e.status??e.source??`absent`}function fn(e){return e.kind===`external-tool`?N:e.kind===`public-http`?O:A}function Z({status:e}){return(0,K.jsx)(`span`,{"aria-hidden":`true`,className:r(`inline-block h-1.5 w-1.5 rounded-full`,pn.has(e)?`bg-success`:mn.has(e)?`bg-info`:hn.has(e)?`bg-destructive`:`bg-warning`)})}function Q(e){return e===`configured`||e===`file`?`Configured`:e===`env`?`From environment`:e===`installed`?`Installed`:e===`missing`?`Missing`:e===`session_ok`?`Session ready`:e===`session_missing`?`Login needed`:e===`session_stale`?`Session stale`:e===`skipped`?`Skipped`:e===`reachable`?`Reachable`:e===`unreachable`?`Unreachable`:e===`error`?`Needs attention`:e===`unknown`?`Not verified yet`:`Not configured`}function $(e){return pn.has(e)?`text-success`:mn.has(e)?`text-info`:hn.has(e)?`text-destructive`:`text-warning`}var pn=new Set([`configured`,`file`,`installed`,`session_ok`,`reachable`]),mn=new Set([`env`,`skipped`]),hn=new Set([`error`,`unreachable`]);function gn(e){let t=Date.parse(e);if(Number.isNaN(t))return`just now`;let n=Math.max(0,Math.round((Date.now()-t)/1e3));if(n<60)return`just now`;let r=Math.round(n/60);if(r<60)return`${r}m ago`;let i=Math.round(r/60);return i<24?`${i}h ago`:`${Math.round(i/24)}d ago`}export{Lt as CatalogList,Pt as CatalogOverlay,Kt as buildCatalogToolInvokePayload,an as formatArgsForPrompt};
|