opencandle 0.5.0 → 0.7.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 +170 -186
- package/dist/analysts/contracts.d.ts +1 -3
- package/dist/analysts/contracts.js +1 -11
- package/dist/analysts/contracts.js.map +1 -1
- package/dist/analysts/orchestrator.d.ts +1 -3
- package/dist/analysts/orchestrator.js +1 -26
- package/dist/analysts/orchestrator.js.map +1 -1
- package/dist/cli.js +66 -7
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +13 -3
- package/dist/config.js +25 -5
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/infra/cache.d.ts +8 -11
- package/dist/infra/cache.js +17 -15
- package/dist/infra/cache.js.map +1 -1
- package/dist/infra/http-client.d.ts +4 -1
- package/dist/infra/http-client.js +59 -6
- package/dist/infra/http-client.js.map +1 -1
- package/dist/infra/index.d.ts +2 -3
- package/dist/infra/index.js +2 -3
- package/dist/infra/index.js.map +1 -1
- package/dist/infra/native-dependencies.js +2 -2
- package/dist/infra/native-dependencies.js.map +1 -1
- package/dist/infra/node-version.js.map +1 -1
- package/dist/infra/opencandle-paths.d.ts +0 -3
- package/dist/infra/opencandle-paths.js +4 -11
- package/dist/infra/opencandle-paths.js.map +1 -1
- package/dist/infra/rate-limiter.js +12 -9
- package/dist/infra/rate-limiter.js.map +1 -1
- package/dist/market-state/alert-conditions.d.ts +34 -0
- package/dist/market-state/alert-conditions.js +23 -0
- package/dist/market-state/alert-conditions.js.map +1 -0
- package/dist/market-state/alert-runner.d.ts +55 -0
- package/dist/market-state/alert-runner.js +634 -0
- package/dist/market-state/alert-runner.js.map +1 -0
- package/dist/market-state/daily-report.d.ts +26 -0
- package/dist/market-state/daily-report.js +179 -0
- package/dist/market-state/daily-report.js.map +1 -0
- package/dist/market-state/local-automation-service.d.ts +25 -0
- package/dist/market-state/local-automation-service.js +119 -0
- package/dist/market-state/local-automation-service.js.map +1 -0
- package/dist/market-state/notification-delivery.d.ts +14 -0
- package/dist/market-state/notification-delivery.js +139 -0
- package/dist/market-state/notification-delivery.js.map +1 -0
- package/dist/market-state/resolve-for-mutation.d.ts +10 -0
- package/dist/market-state/resolve-for-mutation.js +15 -0
- package/dist/market-state/resolve-for-mutation.js.map +1 -0
- package/dist/market-state/resolve.d.ts +14 -0
- package/dist/market-state/resolve.js +89 -0
- package/dist/market-state/resolve.js.map +1 -0
- package/dist/market-state/service.d.ts +527 -0
- package/dist/market-state/service.js +1099 -0
- package/dist/market-state/service.js.map +1 -0
- package/dist/memory/index.d.ts +7 -7
- package/dist/memory/index.js +6 -6
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/manager.js +11 -11
- package/dist/memory/manager.js.map +1 -1
- package/dist/memory/retrieval.js +7 -4
- package/dist/memory/retrieval.js.map +1 -1
- package/dist/memory/sqlite.js +385 -3
- package/dist/memory/sqlite.js.map +1 -1
- package/dist/memory/storage.js +1 -2
- package/dist/memory/storage.js.map +1 -1
- package/dist/memory/tool-defaults.js +64 -28
- package/dist/memory/tool-defaults.js.map +1 -1
- package/dist/memory/types.js.map +1 -1
- package/dist/monitor.d.ts +2 -0
- package/dist/monitor.js +104 -0
- package/dist/monitor.js.map +1 -0
- package/dist/onboarding/connect.d.ts +2 -2
- package/dist/onboarding/connect.js +13 -8
- package/dist/onboarding/connect.js.map +1 -1
- package/dist/onboarding/credential-interceptor.js +1 -1
- package/dist/onboarding/credential-interceptor.js.map +1 -1
- package/dist/onboarding/degradation-accumulator.js +1 -3
- package/dist/onboarding/degradation-accumulator.js.map +1 -1
- package/dist/onboarding/provider-status.d.ts +48 -0
- package/dist/onboarding/provider-status.js +285 -0
- package/dist/onboarding/provider-status.js.map +1 -0
- package/dist/onboarding/providers.d.ts +85 -8
- package/dist/onboarding/providers.js +83 -18
- package/dist/onboarding/providers.js.map +1 -1
- package/dist/onboarding/state.d.ts +1 -0
- package/dist/onboarding/state.js +5 -0
- package/dist/onboarding/state.js.map +1 -1
- package/dist/onboarding/tool-helpers.js +1 -1
- package/dist/onboarding/tool-helpers.js.map +1 -1
- package/dist/onboarding/tool-tags.d.ts +12 -1
- package/dist/onboarding/tool-tags.js +37 -5
- package/dist/onboarding/tool-tags.js.map +1 -1
- package/dist/onboarding/validation.d.ts +2 -2
- package/dist/onboarding/validation.js +1 -1
- package/dist/onboarding/validation.js.map +1 -1
- package/dist/pi/opencandle-extension.d.ts +8 -0
- package/dist/pi/opencandle-extension.js +502 -42
- package/dist/pi/opencandle-extension.js.map +1 -1
- package/dist/pi/session.d.ts +1 -1
- package/dist/pi/session.js +3 -1
- package/dist/pi/session.js.map +1 -1
- package/dist/pi/setup.js +8 -3
- package/dist/pi/setup.js.map +1 -1
- package/dist/pi/tool-adapter.d.ts +4 -1
- package/dist/pi/tool-adapter.js +10 -6
- package/dist/pi/tool-adapter.js.map +1 -1
- package/dist/prompts/context-builder.d.ts +1 -1
- package/dist/prompts/context-builder.js +20 -7
- package/dist/prompts/context-builder.js.map +1 -1
- package/dist/prompts/policy-cards.d.ts +1 -1
- package/dist/prompts/policy-cards.js +2 -2
- package/dist/prompts/policy-cards.js.map +1 -1
- package/dist/prompts/sections.d.ts +1 -1
- package/dist/prompts/symbol-preflight.d.ts +20 -0
- package/dist/prompts/symbol-preflight.js +49 -0
- package/dist/prompts/symbol-preflight.js.map +1 -0
- package/dist/prompts/workflow-prompts.d.ts +1 -1
- package/dist/prompts/workflow-prompts.js +54 -16
- package/dist/prompts/workflow-prompts.js.map +1 -1
- package/dist/providers/alpha-vantage.d.ts +1 -1
- package/dist/providers/alpha-vantage.js +26 -7
- package/dist/providers/alpha-vantage.js.map +1 -1
- package/dist/providers/coingecko.js +1 -1
- package/dist/providers/coingecko.js.map +1 -1
- package/dist/providers/errors.d.ts +5 -0
- package/dist/providers/errors.js +11 -0
- package/dist/providers/errors.js.map +1 -0
- package/dist/providers/exa-search.d.ts +2 -2
- package/dist/providers/exa-search.js +19 -11
- package/dist/providers/exa-search.js.map +1 -1
- package/dist/providers/external-tool-error.d.ts +10 -0
- package/dist/providers/external-tool-error.js +21 -0
- package/dist/providers/external-tool-error.js.map +1 -0
- package/dist/providers/fear-greed.js +1 -1
- package/dist/providers/fear-greed.js.map +1 -1
- package/dist/providers/finnhub.js +3 -5
- package/dist/providers/finnhub.js.map +1 -1
- package/dist/providers/fred.js +2 -2
- package/dist/providers/fred.js.map +1 -1
- package/dist/providers/index.d.ts +7 -6
- package/dist/providers/index.js +6 -5
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/reddit-cli.d.ts +36 -0
- package/dist/providers/reddit-cli.js +201 -0
- package/dist/providers/reddit-cli.js.map +1 -0
- package/dist/providers/reddit.d.ts +1 -1
- package/dist/providers/reddit.js +9 -37
- package/dist/providers/reddit.js.map +1 -1
- package/dist/providers/sec-edgar.d.ts +1 -0
- package/dist/providers/sec-edgar.js +12 -4
- package/dist/providers/sec-edgar.js.map +1 -1
- package/dist/providers/tradingview.d.ts +47 -0
- package/dist/providers/tradingview.js +275 -0
- package/dist/providers/tradingview.js.map +1 -0
- package/dist/providers/twitter-cli.d.ts +40 -0
- package/dist/providers/twitter-cli.js +153 -0
- package/dist/providers/twitter-cli.js.map +1 -0
- package/dist/providers/twitter.d.ts +0 -8
- package/dist/providers/twitter.js +8 -60
- package/dist/providers/twitter.js.map +1 -1
- package/dist/providers/web-search.js +26 -12
- package/dist/providers/web-search.js.map +1 -1
- package/dist/providers/with-fallback.js +4 -2
- package/dist/providers/with-fallback.js.map +1 -1
- package/dist/providers/wrap-provider.d.ts +2 -3
- package/dist/providers/wrap-provider.js +44 -8
- package/dist/providers/wrap-provider.js.map +1 -1
- package/dist/providers/yahoo-finance.d.ts +1 -1
- package/dist/providers/yahoo-finance.js +153 -48
- package/dist/providers/yahoo-finance.js.map +1 -1
- package/dist/routing/classify-intent.d.ts +6 -0
- package/dist/routing/classify-intent.js +78 -7
- package/dist/routing/classify-intent.js.map +1 -1
- package/dist/routing/defaults.d.ts +1 -1
- package/dist/routing/entity-extractor.d.ts +1 -0
- package/dist/routing/entity-extractor.js +234 -29
- package/dist/routing/entity-extractor.js.map +1 -1
- package/dist/routing/fund-symbols.d.ts +2 -0
- package/dist/routing/fund-symbols.js +55 -0
- package/dist/routing/fund-symbols.js.map +1 -0
- package/dist/routing/horizon.d.ts +1 -0
- package/dist/routing/horizon.js +10 -0
- package/dist/routing/horizon.js.map +1 -0
- package/dist/routing/index.d.ts +10 -10
- package/dist/routing/index.js +6 -6
- package/dist/routing/index.js.map +1 -1
- package/dist/routing/planning.d.ts +2 -2
- package/dist/routing/planning.js +65 -34
- package/dist/routing/planning.js.map +1 -1
- package/dist/routing/route-manifest.d.ts +2 -2
- package/dist/routing/route-manifest.js +25 -4
- package/dist/routing/route-manifest.js.map +1 -1
- package/dist/routing/router-llm-client.js.map +1 -1
- package/dist/routing/router-prompt.js +7 -9
- package/dist/routing/router-prompt.js.map +1 -1
- package/dist/routing/router-types.d.ts +1 -0
- package/dist/routing/router.js +137 -22
- package/dist/routing/router.js.map +1 -1
- package/dist/routing/slot-resolver.d.ts +1 -1
- package/dist/routing/slot-resolver.js +2 -4
- package/dist/routing/slot-resolver.js.map +1 -1
- package/dist/routing/symbol-disambiguator.d.ts +11 -0
- package/dist/routing/symbol-disambiguator.js +52 -0
- package/dist/routing/symbol-disambiguator.js.map +1 -0
- package/dist/routing/turn-context.d.ts +1 -1
- package/dist/routing/turn-context.js +1 -1
- package/dist/routing/turn-context.js.map +1 -1
- package/dist/routing/types.d.ts +2 -0
- package/dist/runtime/answer-contracts.d.ts +1 -1
- package/dist/runtime/answer-contracts.js +48 -9
- package/dist/runtime/answer-contracts.js.map +1 -1
- package/dist/runtime/artifact-contracts.js.map +1 -1
- package/dist/runtime/planning-evidence.js +47 -26
- package/dist/runtime/planning-evidence.js.map +1 -1
- package/dist/runtime/prompt-step.d.ts +1 -9
- package/dist/runtime/prompt-step.js +0 -10
- package/dist/runtime/prompt-step.js.map +1 -1
- package/dist/runtime/run-context.d.ts +5 -2
- package/dist/runtime/run-context.js +8 -1
- package/dist/runtime/run-context.js.map +1 -1
- package/dist/runtime/session-coordinator.d.ts +13 -5
- package/dist/runtime/session-coordinator.js +160 -20
- package/dist/runtime/session-coordinator.js.map +1 -1
- package/dist/runtime/session-title.d.ts +14 -0
- package/dist/runtime/session-title.js +50 -0
- package/dist/runtime/session-title.js.map +1 -0
- package/dist/runtime/tool-defaults-wrapper.js +7 -5
- package/dist/runtime/tool-defaults-wrapper.js.map +1 -1
- package/dist/runtime/validation.js.map +1 -1
- package/dist/runtime/workflow-events.js.map +1 -1
- package/dist/runtime/workflow-runner.d.ts +3 -3
- package/dist/runtime/workflow-runner.js +1 -1
- package/dist/runtime/workflow-runner.js.map +1 -1
- package/dist/sentiment/adapters/finnhub.d.ts +1 -1
- package/dist/sentiment/adapters/finnhub.js +6 -1
- package/dist/sentiment/adapters/finnhub.js.map +1 -1
- package/dist/sentiment/adapters/reddit.d.ts +2 -2
- package/dist/sentiment/adapters/twitter.d.ts +1 -1
- package/dist/sentiment/adapters/web.d.ts +1 -1
- package/dist/sentiment/index.d.ts +10 -11
- package/dist/sentiment/index.js +10 -20
- package/dist/sentiment/index.js.map +1 -1
- package/dist/sentiment/insights.d.ts +17 -0
- package/dist/sentiment/insights.js +206 -0
- package/dist/sentiment/insights.js.map +1 -0
- package/dist/sentiment/keywords.js +26 -4
- package/dist/sentiment/keywords.js.map +1 -1
- package/dist/sentiment/pipeline.d.ts +2 -2
- package/dist/sentiment/pipeline.js +14 -2
- package/dist/sentiment/pipeline.js.map +1 -1
- package/dist/sentiment/scorer.d.ts +2 -0
- package/dist/sentiment/scorer.js +11 -2
- package/dist/sentiment/scorer.js.map +1 -1
- package/dist/sentiment/store.d.ts +1 -1
- package/dist/sentiment/store.js +1 -1
- package/dist/sentiment/store.js.map +1 -1
- package/dist/sentiment/trends.d.ts +1 -1
- package/dist/sentiment/trends.js.map +1 -1
- package/dist/sentiment/types.d.ts +2 -0
- package/dist/sentiment/types.js.map +1 -1
- package/dist/system-prompt.js +6 -9
- package/dist/system-prompt.js.map +1 -1
- package/dist/tool-kit.d.ts +7 -7
- package/dist/tool-kit.js +4 -4
- package/dist/tool-kit.js.map +1 -1
- package/dist/tools/fundamentals/company-overview.js +11 -6
- package/dist/tools/fundamentals/company-overview.js.map +1 -1
- package/dist/tools/fundamentals/comps.js +18 -9
- package/dist/tools/fundamentals/comps.js.map +1 -1
- package/dist/tools/fundamentals/dcf.js +23 -11
- package/dist/tools/fundamentals/dcf.js.map +1 -1
- package/dist/tools/fundamentals/earnings.js +8 -3
- package/dist/tools/fundamentals/earnings.js.map +1 -1
- package/dist/tools/fundamentals/financials.js +8 -3
- package/dist/tools/fundamentals/financials.js.map +1 -1
- package/dist/tools/fundamentals/sec-filings.js +21 -6
- package/dist/tools/fundamentals/sec-filings.js.map +1 -1
- package/dist/tools/index.d.ts +27 -20
- package/dist/tools/index.js +55 -43
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/interaction/ask-user.js +15 -3
- package/dist/tools/interaction/ask-user.js.map +1 -1
- package/dist/tools/macro/fear-greed.js.map +1 -1
- package/dist/tools/macro/fred-data.d.ts +1 -1
- package/dist/tools/macro/fred-data.js +17 -6
- package/dist/tools/macro/fred-data.js.map +1 -1
- package/dist/tools/market/crypto-history.js +3 -1
- package/dist/tools/market/crypto-history.js.map +1 -1
- package/dist/tools/market/crypto-price.js +3 -1
- package/dist/tools/market/crypto-price.js.map +1 -1
- package/dist/tools/market/screen-stocks.d.ts +18 -0
- package/dist/tools/market/screen-stocks.js +252 -0
- package/dist/tools/market/screen-stocks.js.map +1 -0
- package/dist/tools/market/search-ticker.js +160 -8
- package/dist/tools/market/search-ticker.js.map +1 -1
- package/dist/tools/market/stock-history.d.ts +2 -2
- package/dist/tools/market/stock-history.js +26 -7
- package/dist/tools/market/stock-history.js.map +1 -1
- package/dist/tools/market/stock-quote.js +5 -3
- package/dist/tools/market/stock-quote.js.map +1 -1
- package/dist/tools/options/greeks.js +1 -1
- package/dist/tools/options/greeks.js.map +1 -1
- package/dist/tools/options/option-chain.js +19 -6
- package/dist/tools/options/option-chain.js.map +1 -1
- package/dist/tools/portfolio/alerts.d.ts +15 -0
- package/dist/tools/portfolio/alerts.js +357 -0
- package/dist/tools/portfolio/alerts.js.map +1 -0
- package/dist/tools/portfolio/correlation.d.ts +1 -1
- package/dist/tools/portfolio/correlation.js +33 -13
- package/dist/tools/portfolio/correlation.js.map +1 -1
- package/dist/tools/portfolio/daily-report.d.ts +8 -0
- package/dist/tools/portfolio/daily-report.js +83 -0
- package/dist/tools/portfolio/daily-report.js.map +1 -0
- package/dist/tools/portfolio/holdings-overlap.js +10 -3
- package/dist/tools/portfolio/holdings-overlap.js.map +1 -1
- package/dist/tools/portfolio/notifications.d.ts +7 -0
- package/dist/tools/portfolio/notifications.js +43 -0
- package/dist/tools/portfolio/notifications.js.map +1 -0
- package/dist/tools/portfolio/predictions.d.ts +12 -6
- package/dist/tools/portfolio/predictions.js +337 -87
- package/dist/tools/portfolio/predictions.js.map +1 -1
- package/dist/tools/portfolio/risk-analysis.d.ts +1 -1
- package/dist/tools/portfolio/risk-analysis.js +45 -6
- package/dist/tools/portfolio/risk-analysis.js.map +1 -1
- package/dist/tools/portfolio/tracker.d.ts +4 -3
- package/dist/tools/portfolio/tracker.js +246 -101
- package/dist/tools/portfolio/tracker.js.map +1 -1
- package/dist/tools/portfolio/watchlist.d.ts +6 -4
- package/dist/tools/portfolio/watchlist.js +208 -108
- package/dist/tools/portfolio/watchlist.js.map +1 -1
- package/dist/tools/sentiment/insight-format.d.ts +2 -0
- package/dist/tools/sentiment/insight-format.js +36 -0
- package/dist/tools/sentiment/insight-format.js.map +1 -0
- package/dist/tools/sentiment/query-match.d.ts +3 -0
- package/dist/tools/sentiment/query-match.js +113 -0
- package/dist/tools/sentiment/query-match.js.map +1 -0
- package/dist/tools/sentiment/reddit-sentiment.d.ts +12 -1
- package/dist/tools/sentiment/reddit-sentiment.js +266 -107
- package/dist/tools/sentiment/reddit-sentiment.js.map +1 -1
- package/dist/tools/sentiment/sentiment-summary.d.ts +9 -1
- package/dist/tools/sentiment/sentiment-summary.js +223 -205
- package/dist/tools/sentiment/sentiment-summary.js.map +1 -1
- package/dist/tools/sentiment/sentiment-trend.d.ts +1 -1
- package/dist/tools/sentiment/sentiment-trend.js +12 -2
- package/dist/tools/sentiment/sentiment-trend.js.map +1 -1
- package/dist/tools/sentiment/twitter-sentiment.d.ts +11 -1
- package/dist/tools/sentiment/twitter-sentiment.js +188 -58
- package/dist/tools/sentiment/twitter-sentiment.js.map +1 -1
- package/dist/tools/sentiment/untrusted-text.d.ts +2 -0
- package/dist/tools/sentiment/untrusted-text.js +17 -0
- package/dist/tools/sentiment/untrusted-text.js.map +1 -0
- package/dist/tools/sentiment/web-search.js +9 -13
- package/dist/tools/sentiment/web-search.js.map +1 -1
- package/dist/tools/sentiment/web-sentiment.js +19 -3
- package/dist/tools/sentiment/web-sentiment.js.map +1 -1
- package/dist/tools/technical/backtest.d.ts +1 -1
- package/dist/tools/technical/backtest.js +27 -20
- package/dist/tools/technical/backtest.js.map +1 -1
- package/dist/tools/technical/indicators.js +23 -5
- package/dist/tools/technical/indicators.js.map +1 -1
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.js.map +1 -1
- package/dist/types/market.d.ts +1 -0
- package/dist/types/portfolio.d.ts +14 -4
- package/dist/types/sentiment.d.ts +52 -0
- package/dist/workflows/compare-assets.d.ts +0 -3
- package/dist/workflows/compare-assets.js +20 -11
- package/dist/workflows/compare-assets.js.map +1 -1
- package/dist/workflows/index.d.ts +3 -4
- package/dist/workflows/index.js +3 -3
- package/dist/workflows/index.js.map +1 -1
- package/dist/workflows/options-screener.d.ts +0 -3
- package/dist/workflows/options-screener.js +4 -11
- package/dist/workflows/options-screener.js.map +1 -1
- package/dist/workflows/portfolio-builder.d.ts +0 -3
- package/dist/workflows/portfolio-builder.js +0 -8
- package/dist/workflows/portfolio-builder.js.map +1 -1
- package/gui/server/ask-user-bridge.ts +1 -1
- package/gui/server/automation-heartbeat.ts +97 -0
- package/gui/server/background-quotes.ts +97 -1
- package/gui/server/chat-event-adapter.ts +32 -10
- package/gui/server/chat-run-session.ts +16 -0
- package/gui/server/invoke-tool.ts +160 -3
- package/gui/server/live-chat-event-adapter.ts +21 -6
- package/gui/server/market-state-api.ts +315 -0
- package/gui/server/model-setup.ts +156 -2
- package/gui/server/private-api-access.ts +62 -0
- package/gui/server/projector.ts +18 -9
- package/gui/server/prompt-observation.ts +4 -7
- package/gui/server/quote-snapshot-store.ts +50 -0
- package/gui/server/server.ts +218 -451
- package/gui/server/session-actions.ts +186 -1
- package/gui/server/shutdown.ts +47 -0
- package/gui/server/tool-invoke-ack.ts +49 -0
- package/gui/server/tool-metadata.ts +101 -24
- package/gui/server/websocket.ts +13 -3
- package/gui/server/writer-lock.ts +6 -2
- package/gui/server/ws-hub.ts +311 -0
- package/gui/shared/chat-events.ts +16 -1
- package/gui/shared/event-reducer.ts +24 -6
- package/gui/web/dist/assets/CatalogOverlay-CgeY5Pkp.js +1 -0
- package/gui/web/dist/assets/index-C6W_2eAn.js +69 -0
- package/gui/web/dist/assets/index-hwbx24a5.css +1 -0
- package/gui/web/dist/index.html +2 -2
- package/package.json +9 -6
- package/src/analysts/contracts.ts +10 -23
- package/src/analysts/orchestrator.ts +8 -43
- package/src/cli.ts +76 -12
- package/src/config.ts +44 -9
- package/src/index.ts +1 -1
- package/src/infra/cache.ts +41 -30
- package/src/infra/http-client.ts +72 -6
- package/src/infra/index.ts +6 -10
- package/src/infra/native-dependencies.ts +8 -3
- package/src/infra/node-version.ts +3 -1
- package/src/infra/opencandle-paths.ts +3 -14
- package/src/infra/rate-limiter.ts +22 -19
- package/src/market-state/alert-conditions.ts +82 -0
- package/src/market-state/alert-runner.ts +863 -0
- package/src/market-state/daily-report.ts +247 -0
- package/src/market-state/local-automation-service.ts +162 -0
- package/src/market-state/notification-delivery.ts +158 -0
- package/src/market-state/resolve-for-mutation.ts +24 -0
- package/src/market-state/resolve.ts +112 -0
- package/src/market-state/service.ts +2344 -0
- package/src/memory/index.ts +7 -7
- package/src/memory/manager.ts +14 -16
- package/src/memory/retrieval.ts +8 -7
- package/src/memory/sqlite.ts +407 -6
- package/src/memory/storage.ts +5 -15
- package/src/memory/tool-defaults.ts +60 -39
- package/src/memory/types.ts +3 -3
- package/src/monitor.ts +121 -0
- package/src/onboarding/connect.ts +24 -31
- package/src/onboarding/credential-interceptor.ts +3 -15
- package/src/onboarding/degradation-accumulator.ts +1 -3
- package/src/onboarding/provider-status.ts +410 -0
- package/src/onboarding/providers.ts +144 -45
- package/src/onboarding/state.ts +13 -15
- package/src/onboarding/tool-helpers.ts +2 -9
- package/src/onboarding/tool-tags.ts +51 -8
- package/src/onboarding/validation.ts +16 -22
- package/src/pi/opencandle-extension.ts +643 -101
- package/src/pi/session.ts +7 -5
- package/src/pi/setup.ts +61 -43
- package/src/pi/tool-adapter.ts +19 -6
- package/src/prompts/context-builder.ts +24 -13
- package/src/prompts/policy-cards.ts +3 -3
- package/src/prompts/sections.ts +1 -1
- package/src/prompts/symbol-preflight.ts +80 -0
- package/src/prompts/workflow-prompts.ts +77 -28
- package/src/providers/alpha-vantage.ts +58 -39
- package/src/providers/coingecko.ts +2 -5
- package/src/providers/errors.ts +9 -0
- package/src/providers/exa-search.ts +24 -22
- package/src/providers/external-tool-error.ts +20 -0
- package/src/providers/fear-greed.ts +1 -1
- package/src/providers/finnhub.ts +7 -6
- package/src/providers/fred.ts +3 -3
- package/src/providers/index.ts +14 -6
- package/src/providers/reddit-cli.ts +317 -0
- package/src/providers/reddit.ts +14 -59
- package/src/providers/sec-edgar.ts +20 -6
- package/src/providers/tradingview.ts +399 -0
- package/src/providers/twitter-cli.ts +233 -0
- package/src/providers/twitter.ts +8 -79
- package/src/providers/web-search.ts +30 -20
- package/src/providers/with-fallback.ts +8 -7
- package/src/providers/wrap-provider.ts +49 -10
- package/src/providers/yahoo-finance.ts +204 -66
- package/src/routing/classify-intent.ts +101 -10
- package/src/routing/defaults.ts +1 -1
- package/src/routing/entity-extractor.ts +287 -38
- package/src/routing/fund-symbols.ts +58 -0
- package/src/routing/horizon.ts +7 -0
- package/src/routing/index.ts +48 -48
- package/src/routing/planning.ts +145 -53
- package/src/routing/route-manifest.ts +37 -15
- package/src/routing/router-llm-client.ts +4 -4
- package/src/routing/router-prompt.ts +15 -19
- package/src/routing/router-types.ts +2 -5
- package/src/routing/router.ts +251 -53
- package/src/routing/slot-resolver.ts +34 -11
- package/src/routing/symbol-disambiguator.ts +72 -0
- package/src/routing/turn-context.ts +6 -9
- package/src/routing/types.ts +2 -0
- package/src/runtime/answer-contracts.ts +105 -45
- package/src/runtime/artifact-contracts.ts +2 -1
- package/src/runtime/planning-evidence.ts +157 -66
- package/src/runtime/prompt-step.ts +1 -16
- package/src/runtime/run-context.ts +12 -2
- package/src/runtime/session-coordinator.ts +238 -63
- package/src/runtime/session-title.ts +60 -0
- package/src/runtime/tool-defaults-wrapper.ts +13 -5
- package/src/runtime/validation.ts +1 -4
- package/src/runtime/workflow-events.ts +7 -7
- package/src/runtime/workflow-runner.ts +5 -11
- package/src/sentiment/adapters/finnhub.ts +7 -2
- package/src/sentiment/adapters/reddit.ts +2 -2
- package/src/sentiment/adapters/twitter.ts +1 -1
- package/src/sentiment/adapters/web.ts +1 -1
- package/src/sentiment/index.ts +17 -26
- package/src/sentiment/insights.ts +269 -0
- package/src/sentiment/keywords.ts +26 -4
- package/src/sentiment/pipeline.ts +28 -5
- package/src/sentiment/scorer.ts +13 -2
- package/src/sentiment/store.ts +2 -2
- package/src/sentiment/trends.ts +9 -3
- package/src/sentiment/types.ts +8 -4
- package/src/system-prompt.ts +6 -9
- package/src/tool-kit.ts +10 -9
- package/src/tools/fundamentals/company-overview.ts +19 -9
- package/src/tools/fundamentals/comps.ts +68 -55
- package/src/tools/fundamentals/dcf.ts +145 -95
- package/src/tools/fundamentals/earnings.ts +16 -6
- package/src/tools/fundamentals/financials.ts +16 -7
- package/src/tools/fundamentals/sec-filings.ts +37 -16
- package/src/tools/index.ts +56 -43
- package/src/tools/interaction/ask-user.ts +22 -10
- package/src/tools/macro/fear-greed.ts +1 -1
- package/src/tools/macro/fred-data.ts +58 -46
- package/src/tools/market/crypto-history.ts +8 -3
- package/src/tools/market/crypto-price.ts +6 -6
- package/src/tools/market/screen-stocks.ts +279 -0
- package/src/tools/market/search-ticker.ts +218 -17
- package/src/tools/market/stock-history.ts +37 -12
- package/src/tools/market/stock-quote.ts +10 -7
- package/src/tools/options/greeks.ts +5 -5
- package/src/tools/options/option-chain.ts +41 -17
- package/src/tools/portfolio/alerts.ts +457 -0
- package/src/tools/portfolio/correlation.ts +47 -20
- package/src/tools/portfolio/daily-report.ts +101 -0
- package/src/tools/portfolio/holdings-overlap.ts +31 -15
- package/src/tools/portfolio/notifications.ts +45 -0
- package/src/tools/portfolio/predictions.ts +406 -106
- package/src/tools/portfolio/risk-analysis.ts +46 -7
- package/src/tools/portfolio/tracker.ts +270 -109
- package/src/tools/portfolio/watchlist.ts +250 -121
- package/src/tools/sentiment/insight-format.ts +50 -0
- package/src/tools/sentiment/query-match.ts +117 -0
- package/src/tools/sentiment/reddit-sentiment.ts +360 -121
- package/src/tools/sentiment/sentiment-summary.ts +302 -235
- package/src/tools/sentiment/sentiment-trend.ts +24 -7
- package/src/tools/sentiment/twitter-sentiment.ts +264 -73
- package/src/tools/sentiment/untrusted-text.ts +21 -0
- package/src/tools/sentiment/web-search.ts +21 -18
- package/src/tools/sentiment/web-sentiment.ts +30 -10
- package/src/tools/technical/backtest.ts +32 -22
- package/src/tools/technical/indicators.ts +39 -14
- package/src/types/index.ts +8 -3
- package/src/types/market.ts +1 -0
- package/src/types/portfolio.ts +14 -4
- package/src/types/sentiment.ts +61 -2
- package/src/workflows/compare-assets.ts +33 -21
- package/src/workflows/index.ts +3 -4
- package/src/workflows/options-screener.ts +27 -29
- package/src/workflows/portfolio-builder.ts +34 -27
- package/dist/infra/browser.d.ts +0 -35
- package/dist/infra/browser.js +0 -103
- package/dist/infra/browser.js.map +0 -1
- package/dist/tools/interaction/twitter-login.d.ts +0 -8
- package/dist/tools/interaction/twitter-login.js +0 -77
- package/dist/tools/interaction/twitter-login.js.map +0 -1
- package/dist/workflows/types.d.ts +0 -4
- package/dist/workflows/types.js +0 -2
- package/dist/workflows/types.js.map +0 -1
- package/gui/web/dist/assets/CatalogOverlay-Bmp6Knu7.js +0 -1
- package/gui/web/dist/assets/index-Bxt9QpLX.css +0 -1
- package/gui/web/dist/assets/index-CZ9DHZYy.js +0 -67
- package/src/infra/browser.ts +0 -111
- package/src/tools/interaction/twitter-login.ts +0 -93
- package/src/workflows/types.ts +0 -4
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
export type
|
|
2
|
-
export type
|
|
1
|
+
export type ApiKeyProviderId = "alpha_vantage" | "fred" | "finnhub" | "brave" | "exa";
|
|
2
|
+
export type ExternalToolProviderId = "twitter" | "reddit";
|
|
3
|
+
export type PublicHttpProviderId = "yahoo";
|
|
4
|
+
export type ProviderId = ApiKeyProviderId | ExternalToolProviderId | PublicHttpProviderId;
|
|
5
|
+
export type ProviderCategory = "fundamentals" | "macro" | "news" | "web_search" | "sentiment" | "market";
|
|
3
6
|
export type ProviderTier = "hard" | "soft";
|
|
4
|
-
|
|
7
|
+
interface BaseProviderDescriptor {
|
|
5
8
|
readonly id: ProviderId;
|
|
9
|
+
readonly kind: "api-key" | "external-tool" | "public-http";
|
|
6
10
|
readonly displayName: string;
|
|
7
11
|
readonly category: ProviderCategory;
|
|
8
12
|
/**
|
|
@@ -15,11 +19,6 @@ export interface ProviderDescriptor {
|
|
|
15
19
|
readonly tier: ProviderTier;
|
|
16
20
|
/** Lowercase friendly aliases accepted by `/connect` in addition to the id. */
|
|
17
21
|
readonly aliases: readonly string[];
|
|
18
|
-
readonly signupUrl: string;
|
|
19
|
-
readonly freeTier: boolean;
|
|
20
|
-
readonly envVar: string;
|
|
21
|
-
/** Nested key path into `OpenCandleFileConfig` where the key is persisted. */
|
|
22
|
-
readonly configPath: readonly string[];
|
|
23
22
|
readonly unlocks: readonly string[];
|
|
24
23
|
/**
|
|
25
24
|
* Human copy describing the degraded experience when missing, or `null`
|
|
@@ -29,8 +28,33 @@ export interface ProviderDescriptor {
|
|
|
29
28
|
readonly snoozeDurationDays: number;
|
|
30
29
|
readonly instructionsHint: string;
|
|
31
30
|
}
|
|
31
|
+
export interface ApiKeyProviderDescriptor extends BaseProviderDescriptor {
|
|
32
|
+
readonly id: ApiKeyProviderId;
|
|
33
|
+
readonly kind: "api-key";
|
|
34
|
+
readonly signupUrl: string;
|
|
35
|
+
readonly freeTier: boolean;
|
|
36
|
+
readonly envVar: string;
|
|
37
|
+
/** Nested key path into `OpenCandleFileConfig` where the key is persisted. */
|
|
38
|
+
readonly configPath: readonly string[];
|
|
39
|
+
}
|
|
40
|
+
export interface ExternalToolProviderDescriptor extends BaseProviderDescriptor {
|
|
41
|
+
readonly id: ExternalToolProviderId;
|
|
42
|
+
readonly kind: "external-tool";
|
|
43
|
+
readonly binary: string;
|
|
44
|
+
readonly installCmd: string;
|
|
45
|
+
readonly sessionSource: "browser-cookies";
|
|
46
|
+
readonly supportedBrowsers?: readonly string[];
|
|
47
|
+
readonly sessionProbeArgs?: readonly string[];
|
|
48
|
+
}
|
|
49
|
+
export interface PublicHttpProviderDescriptor extends BaseProviderDescriptor {
|
|
50
|
+
readonly id: PublicHttpProviderId;
|
|
51
|
+
readonly kind: "public-http";
|
|
52
|
+
readonly probeUrl: string;
|
|
53
|
+
}
|
|
54
|
+
export type ProviderDescriptor = ApiKeyProviderDescriptor | ExternalToolProviderDescriptor | PublicHttpProviderDescriptor;
|
|
32
55
|
export declare const PROVIDERS: readonly [{
|
|
33
56
|
readonly id: "alpha_vantage";
|
|
57
|
+
readonly kind: "api-key";
|
|
34
58
|
readonly displayName: "Alpha Vantage";
|
|
35
59
|
readonly category: "fundamentals";
|
|
36
60
|
readonly tier: "hard";
|
|
@@ -45,6 +69,7 @@ export declare const PROVIDERS: readonly [{
|
|
|
45
69
|
readonly instructionsHint: "Free, about 30 seconds, signup opens in your browser";
|
|
46
70
|
}, {
|
|
47
71
|
readonly id: "fred";
|
|
72
|
+
readonly kind: "api-key";
|
|
48
73
|
readonly displayName: "FRED";
|
|
49
74
|
readonly category: "macro";
|
|
50
75
|
readonly tier: "hard";
|
|
@@ -59,6 +84,7 @@ export declare const PROVIDERS: readonly [{
|
|
|
59
84
|
readonly instructionsHint: "Free, about 30 seconds, requires a St. Louis Fed account";
|
|
60
85
|
}, {
|
|
61
86
|
readonly id: "finnhub";
|
|
87
|
+
readonly kind: "api-key";
|
|
62
88
|
readonly displayName: "Finnhub";
|
|
63
89
|
readonly category: "news";
|
|
64
90
|
readonly tier: "soft";
|
|
@@ -73,6 +99,7 @@ export declare const PROVIDERS: readonly [{
|
|
|
73
99
|
readonly instructionsHint: "Free, about 30 seconds, signup opens in your browser";
|
|
74
100
|
}, {
|
|
75
101
|
readonly id: "brave";
|
|
102
|
+
readonly kind: "api-key";
|
|
76
103
|
readonly displayName: "Brave Search";
|
|
77
104
|
readonly category: "web_search";
|
|
78
105
|
readonly tier: "soft";
|
|
@@ -87,6 +114,7 @@ export declare const PROVIDERS: readonly [{
|
|
|
87
114
|
readonly instructionsHint: "Free tier available, signup opens in your browser";
|
|
88
115
|
}, {
|
|
89
116
|
readonly id: "exa";
|
|
117
|
+
readonly kind: "api-key";
|
|
90
118
|
readonly displayName: "Exa";
|
|
91
119
|
readonly category: "web_search";
|
|
92
120
|
readonly tier: "soft";
|
|
@@ -99,8 +127,56 @@ export declare const PROVIDERS: readonly [{
|
|
|
99
127
|
readonly fallbackDescription: "Exa search continues to work via the keyless Exa MCP endpoint, which has lower rate limits but similar quality";
|
|
100
128
|
readonly snoozeDurationDays: 7;
|
|
101
129
|
readonly instructionsHint: "Paid with free tier, signup opens in your browser";
|
|
130
|
+
}, {
|
|
131
|
+
readonly id: "yahoo";
|
|
132
|
+
readonly kind: "public-http";
|
|
133
|
+
readonly displayName: "Yahoo Finance";
|
|
134
|
+
readonly category: "market";
|
|
135
|
+
readonly tier: "hard";
|
|
136
|
+
readonly aliases: readonly ["yahoo", "yahoo-finance", "market-data", "options"];
|
|
137
|
+
readonly probeUrl: "https://query1.finance.yahoo.com/v8/finance/chart/SPY?interval=1d&range=1d";
|
|
138
|
+
readonly unlocks: readonly ["quotes", "historical prices", "option chains", "market data"];
|
|
139
|
+
readonly fallbackDescription: null;
|
|
140
|
+
readonly snoozeDurationDays: 7;
|
|
141
|
+
readonly instructionsHint: "No account needed; OpenCandle checks public Yahoo Finance reachability";
|
|
142
|
+
}, {
|
|
143
|
+
readonly id: "twitter";
|
|
144
|
+
readonly kind: "external-tool";
|
|
145
|
+
readonly displayName: "X / Twitter";
|
|
146
|
+
readonly category: "sentiment";
|
|
147
|
+
readonly tier: "soft";
|
|
148
|
+
readonly aliases: readonly ["twitter", "x", "x-sentiment", "twitter-sentiment"];
|
|
149
|
+
readonly binary: "twitter";
|
|
150
|
+
readonly installCmd: "uv tool install twitter-cli";
|
|
151
|
+
readonly sessionSource: "browser-cookies";
|
|
152
|
+
readonly sessionProbeArgs: readonly ["feed", "--max", "1", "--json"];
|
|
153
|
+
readonly supportedBrowsers: readonly ["Chrome", "Arc", "Edge", "Firefox", "Brave"];
|
|
154
|
+
readonly unlocks: readonly ["X/Twitter sentiment", "recent ticker mentions", "social engagement context"];
|
|
155
|
+
readonly fallbackDescription: "Sentiment summaries continue with Reddit, web search, and news when X is unavailable";
|
|
156
|
+
readonly snoozeDurationDays: 7;
|
|
157
|
+
readonly instructionsHint: "Install twitter-cli and stay logged into x.com in a supported browser";
|
|
158
|
+
}, {
|
|
159
|
+
readonly id: "reddit";
|
|
160
|
+
readonly kind: "external-tool";
|
|
161
|
+
readonly displayName: "Reddit";
|
|
162
|
+
readonly category: "sentiment";
|
|
163
|
+
readonly tier: "soft";
|
|
164
|
+
readonly aliases: readonly ["reddit", "reddit-sentiment", "subreddit"];
|
|
165
|
+
readonly binary: "rdt";
|
|
166
|
+
readonly installCmd: "uv tool install rdt-cli";
|
|
167
|
+
readonly sessionSource: "browser-cookies";
|
|
168
|
+
readonly supportedBrowsers: readonly ["Chrome", "Arc", "Edge", "Firefox", "Brave"];
|
|
169
|
+
readonly sessionProbeArgs: readonly ["status", "--json"];
|
|
170
|
+
readonly unlocks: readonly ["Reddit sentiment", "ticker discussion context", "retail investor discussion"];
|
|
171
|
+
readonly fallbackDescription: "Sentiment summaries continue with X/Twitter, web search, and news when Reddit is unavailable";
|
|
172
|
+
readonly snoozeDurationDays: 7;
|
|
173
|
+
readonly instructionsHint: "Install rdt-cli and stay logged into reddit.com in a supported browser";
|
|
102
174
|
}];
|
|
103
175
|
export declare function listAllProviders(): readonly ProviderDescriptor[];
|
|
176
|
+
export declare function isApiKeyProvider(provider: ProviderDescriptor): provider is ApiKeyProviderDescriptor;
|
|
177
|
+
export declare function isExternalToolProvider(provider: ProviderDescriptor): provider is ExternalToolProviderDescriptor;
|
|
178
|
+
export declare function isPublicHttpProvider(provider: ProviderDescriptor): provider is PublicHttpProviderDescriptor;
|
|
179
|
+
export declare function listApiKeyProviders(): readonly ApiKeyProviderDescriptor[];
|
|
104
180
|
export declare function getProvider(id: ProviderId): ProviderDescriptor;
|
|
105
181
|
export declare function getProvidersByCategory(category: ProviderCategory): readonly ProviderDescriptor[];
|
|
106
182
|
export declare function getProvidersByTier(tier: ProviderTier): readonly ProviderDescriptor[];
|
|
@@ -114,3 +190,4 @@ export declare function getCredential(id: ProviderId): {
|
|
|
114
190
|
value?: undefined;
|
|
115
191
|
};
|
|
116
192
|
export declare function resolveProviderFromArgument(arg: string): ProviderDescriptor | readonly ProviderDescriptor[] | undefined;
|
|
193
|
+
export {};
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
// Provider registry — single source of truth for OpenCandle's
|
|
2
|
-
//
|
|
1
|
+
// Provider registry — single source of truth for OpenCandle's third-party
|
|
2
|
+
// data providers. Every setup/status pathway iterates this registry:
|
|
3
3
|
// first-run startup, the `/connect` command, the `tool_result` credential
|
|
4
|
-
// interception handler,
|
|
4
|
+
// interception handler, GUI provider rows, doctor checks, and gap-note
|
|
5
|
+
// generation all read from here.
|
|
5
6
|
//
|
|
6
|
-
// Adding a new
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
// the array ever disagree.
|
|
7
|
+
// Adding a new provider is a two-step change: add its id to the relevant
|
|
8
|
+
// literal union below, and add its descriptor to the `PROVIDERS` array. The
|
|
9
|
+
// `satisfies` and exhaustiveness checks keep the registry and id unions aligned.
|
|
10
10
|
import { getConfig, loadFileConfig } from "../config.js";
|
|
11
11
|
// Declaration order matters: picker display order, per-workflow prompt priority,
|
|
12
12
|
// getProvidersByCategory/getProvidersByTier iteration order.
|
|
13
13
|
export const PROVIDERS = [
|
|
14
14
|
{
|
|
15
15
|
id: "alpha_vantage",
|
|
16
|
+
kind: "api-key",
|
|
16
17
|
displayName: "Alpha Vantage",
|
|
17
18
|
category: "fundamentals",
|
|
18
19
|
tier: "hard",
|
|
@@ -33,6 +34,7 @@ export const PROVIDERS = [
|
|
|
33
34
|
},
|
|
34
35
|
{
|
|
35
36
|
id: "fred",
|
|
37
|
+
kind: "api-key",
|
|
36
38
|
displayName: "FRED",
|
|
37
39
|
category: "macro",
|
|
38
40
|
tier: "hard",
|
|
@@ -41,18 +43,14 @@ export const PROVIDERS = [
|
|
|
41
43
|
freeTier: true,
|
|
42
44
|
envVar: "FRED_API_KEY",
|
|
43
45
|
configPath: ["providers", "fred", "apiKey"],
|
|
44
|
-
unlocks: [
|
|
45
|
-
"interest rates",
|
|
46
|
-
"inflation data",
|
|
47
|
-
"yield curve",
|
|
48
|
-
"economic indicators",
|
|
49
|
-
],
|
|
46
|
+
unlocks: ["interest rates", "inflation data", "yield curve", "economic indicators"],
|
|
50
47
|
fallbackDescription: null,
|
|
51
48
|
snoozeDurationDays: 7,
|
|
52
49
|
instructionsHint: "Free, about 30 seconds, requires a St. Louis Fed account",
|
|
53
50
|
},
|
|
54
51
|
{
|
|
55
52
|
id: "finnhub",
|
|
53
|
+
kind: "api-key",
|
|
56
54
|
displayName: "Finnhub",
|
|
57
55
|
category: "news",
|
|
58
56
|
tier: "soft",
|
|
@@ -61,10 +59,7 @@ export const PROVIDERS = [
|
|
|
61
59
|
freeTier: true,
|
|
62
60
|
envVar: "FINNHUB_API_KEY",
|
|
63
61
|
configPath: ["providers", "finnhub", "apiKey"],
|
|
64
|
-
unlocks: [
|
|
65
|
-
"ticker-tagged company news",
|
|
66
|
-
"sentiment enrichment with a dedicated news source",
|
|
67
|
-
],
|
|
62
|
+
unlocks: ["ticker-tagged company news", "sentiment enrichment with a dedicated news source"],
|
|
68
63
|
// Finnhub is a soft enrichment source — sentiment-summary continues to work
|
|
69
64
|
// with Twitter/Reddit/web search when Finnhub is missing. The fallback is
|
|
70
65
|
// "the other sentiment sources still run".
|
|
@@ -74,6 +69,7 @@ export const PROVIDERS = [
|
|
|
74
69
|
},
|
|
75
70
|
{
|
|
76
71
|
id: "brave",
|
|
72
|
+
kind: "api-key",
|
|
77
73
|
displayName: "Brave Search",
|
|
78
74
|
category: "web_search",
|
|
79
75
|
tier: "soft",
|
|
@@ -92,6 +88,7 @@ export const PROVIDERS = [
|
|
|
92
88
|
},
|
|
93
89
|
{
|
|
94
90
|
id: "exa",
|
|
91
|
+
kind: "api-key",
|
|
95
92
|
displayName: "Exa",
|
|
96
93
|
category: "web_search",
|
|
97
94
|
tier: "soft",
|
|
@@ -115,7 +112,56 @@ export const PROVIDERS = [
|
|
|
115
112
|
snoozeDurationDays: 7,
|
|
116
113
|
instructionsHint: "Paid with free tier, signup opens in your browser",
|
|
117
114
|
},
|
|
115
|
+
{
|
|
116
|
+
id: "yahoo",
|
|
117
|
+
kind: "public-http",
|
|
118
|
+
displayName: "Yahoo Finance",
|
|
119
|
+
category: "market",
|
|
120
|
+
tier: "hard",
|
|
121
|
+
aliases: ["yahoo", "yahoo-finance", "market-data", "options"],
|
|
122
|
+
probeUrl: "https://query1.finance.yahoo.com/v8/finance/chart/SPY?interval=1d&range=1d",
|
|
123
|
+
unlocks: ["quotes", "historical prices", "option chains", "market data"],
|
|
124
|
+
fallbackDescription: null,
|
|
125
|
+
snoozeDurationDays: 7,
|
|
126
|
+
instructionsHint: "No account needed; OpenCandle checks public Yahoo Finance reachability",
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
id: "twitter",
|
|
130
|
+
kind: "external-tool",
|
|
131
|
+
displayName: "X / Twitter",
|
|
132
|
+
category: "sentiment",
|
|
133
|
+
tier: "soft",
|
|
134
|
+
aliases: ["twitter", "x", "x-sentiment", "twitter-sentiment"],
|
|
135
|
+
binary: "twitter",
|
|
136
|
+
installCmd: "uv tool install twitter-cli",
|
|
137
|
+
sessionSource: "browser-cookies",
|
|
138
|
+
sessionProbeArgs: ["feed", "--max", "1", "--json"],
|
|
139
|
+
supportedBrowsers: ["Chrome", "Arc", "Edge", "Firefox", "Brave"],
|
|
140
|
+
unlocks: ["X/Twitter sentiment", "recent ticker mentions", "social engagement context"],
|
|
141
|
+
fallbackDescription: "Sentiment summaries continue with Reddit, web search, and news when X is unavailable",
|
|
142
|
+
snoozeDurationDays: 7,
|
|
143
|
+
instructionsHint: "Install twitter-cli and stay logged into x.com in a supported browser",
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
id: "reddit",
|
|
147
|
+
kind: "external-tool",
|
|
148
|
+
displayName: "Reddit",
|
|
149
|
+
category: "sentiment",
|
|
150
|
+
tier: "soft",
|
|
151
|
+
aliases: ["reddit", "reddit-sentiment", "subreddit"],
|
|
152
|
+
binary: "rdt",
|
|
153
|
+
installCmd: "uv tool install rdt-cli",
|
|
154
|
+
sessionSource: "browser-cookies",
|
|
155
|
+
supportedBrowsers: ["Chrome", "Arc", "Edge", "Firefox", "Brave"],
|
|
156
|
+
sessionProbeArgs: ["status", "--json"],
|
|
157
|
+
unlocks: ["Reddit sentiment", "ticker discussion context", "retail investor discussion"],
|
|
158
|
+
fallbackDescription: "Sentiment summaries continue with X/Twitter, web search, and news when Reddit is unavailable",
|
|
159
|
+
snoozeDurationDays: 7,
|
|
160
|
+
instructionsHint: "Install rdt-cli and stay logged into reddit.com in a supported browser",
|
|
161
|
+
},
|
|
118
162
|
];
|
|
163
|
+
const _providerIdExhaustivenessCheck = {};
|
|
164
|
+
void _providerIdExhaustivenessCheck;
|
|
119
165
|
// -----------------------------------------------------------------------------
|
|
120
166
|
// Lookup helpers
|
|
121
167
|
// -----------------------------------------------------------------------------
|
|
@@ -132,6 +178,18 @@ function byId() {
|
|
|
132
178
|
export function listAllProviders() {
|
|
133
179
|
return PROVIDERS;
|
|
134
180
|
}
|
|
181
|
+
export function isApiKeyProvider(provider) {
|
|
182
|
+
return provider.kind === "api-key";
|
|
183
|
+
}
|
|
184
|
+
export function isExternalToolProvider(provider) {
|
|
185
|
+
return provider.kind === "external-tool";
|
|
186
|
+
}
|
|
187
|
+
export function isPublicHttpProvider(provider) {
|
|
188
|
+
return provider.kind === "public-http";
|
|
189
|
+
}
|
|
190
|
+
export function listApiKeyProviders() {
|
|
191
|
+
return PROVIDERS.filter(isApiKeyProvider);
|
|
192
|
+
}
|
|
135
193
|
export function getProvider(id) {
|
|
136
194
|
const found = byId().get(id);
|
|
137
195
|
if (!found) {
|
|
@@ -173,7 +231,10 @@ const CONFIG_FIELD_BY_ID = {
|
|
|
173
231
|
exa: "exaApiKey",
|
|
174
232
|
};
|
|
175
233
|
export function hasCredential(id) {
|
|
176
|
-
const
|
|
234
|
+
const descriptor = getProvider(id);
|
|
235
|
+
if (!isApiKeyProvider(descriptor))
|
|
236
|
+
return false;
|
|
237
|
+
const field = CONFIG_FIELD_BY_ID[descriptor.id];
|
|
177
238
|
const value = getConfig()[field];
|
|
178
239
|
return typeof value === "string" && value.length > 0;
|
|
179
240
|
}
|
|
@@ -182,6 +243,8 @@ export function getCredentialSource(id) {
|
|
|
182
243
|
}
|
|
183
244
|
export function getCredential(id) {
|
|
184
245
|
const descriptor = getProvider(id);
|
|
246
|
+
if (!isApiKeyProvider(descriptor))
|
|
247
|
+
return { source: "absent" };
|
|
185
248
|
const envValue = process.env[descriptor.envVar];
|
|
186
249
|
if (envValue && envValue.length > 0)
|
|
187
250
|
return { source: "env", value: envValue };
|
|
@@ -217,6 +280,8 @@ export function resolveProviderFromArgument(arg) {
|
|
|
217
280
|
"macro",
|
|
218
281
|
"news",
|
|
219
282
|
"web_search",
|
|
283
|
+
"sentiment",
|
|
284
|
+
"market",
|
|
220
285
|
];
|
|
221
286
|
const normalizedCategory = needle.replace("-", "_");
|
|
222
287
|
if (categories.includes(normalizedCategory)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/onboarding/providers.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"providers.js","sourceRoot":"","sources":["../../src/onboarding/providers.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,7 @@ export declare function saveOnboardingState(state: OnboardingState, path?: strin
|
|
|
23
23
|
export declare function markProviderCompleted(state: OnboardingState, id: ProviderId): OnboardingState;
|
|
24
24
|
export declare function markProviderSnoozed(state: OnboardingState, id: ProviderId, days: number): OnboardingState;
|
|
25
25
|
export declare function markProviderNeverAsk(state: OnboardingState, id: ProviderId): OnboardingState;
|
|
26
|
+
export declare function clearProviderOnboardingEntry(state: OnboardingState, id: ProviderId): OnboardingState;
|
|
26
27
|
export declare function markWelcomeShown(state: OnboardingState): OnboardingState;
|
|
27
28
|
export declare function getProviderEntry(state: OnboardingState, id: ProviderId): ProviderOnboardingEntry | undefined;
|
|
28
29
|
export interface ShouldPromptOptions {
|
package/dist/onboarding/state.js
CHANGED
|
@@ -125,6 +125,11 @@ export function markProviderNeverAsk(state, id) {
|
|
|
125
125
|
},
|
|
126
126
|
};
|
|
127
127
|
}
|
|
128
|
+
export function clearProviderOnboardingEntry(state, id) {
|
|
129
|
+
const providers = { ...state.providers };
|
|
130
|
+
delete providers[id];
|
|
131
|
+
return { ...state, providers };
|
|
132
|
+
}
|
|
128
133
|
export function markWelcomeShown(state) {
|
|
129
134
|
return { ...state, welcomeShownAt: nowIso() };
|
|
130
135
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/onboarding/state.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAC5C,EAAE;AACF,4EAA4E;AAC5E,0EAA0E;AAC1E,EAAE;AACF,0EAA0E;AAC1E,mFAAmF;AAEnF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGlF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAcpC,MAAM,UAAU,yBAAyB;IACvC,OAAO,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AACxD,CAAC;AAED,gFAAgF;AAChF,cAAc;AACd,gFAAgF;AAEhF,MAAM,aAAa,GAAwB,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AAE1F,SAAS,UAAU,CAAC,GAAY;IAC9B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACtD,MAAM,GAAG,GAAG,GAA8B,CAAC;IAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;IAC1B,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/E,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,CAAC;IACtC,IAAI,OAAO,YAAY,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAEvD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,MAAM,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;QACpC,IAAI,OAAO,WAAW,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACtD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;IAC1D,CAAC;IACD,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AAC/C,CAAC;AAED,SAAS,iBAAiB,
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/onboarding/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
// unchanged so existing error handling in `wrapProvider` continues to work.
|
|
13
13
|
import { ProviderCredentialError } from "../providers/provider-credential-error.js";
|
|
14
14
|
import { getProvider, hasCredential } from "./providers.js";
|
|
15
|
-
import { buildCredentialRequiredTag
|
|
15
|
+
import { buildCredentialRequiredTag } from "./tool-tags.js";
|
|
16
16
|
function buildCredentialRequiredResult(provider, reason, httpStatus) {
|
|
17
17
|
const descriptor = getProvider(provider);
|
|
18
18
|
const tag = buildCredentialRequiredTag({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-helpers.js","sourceRoot":"","sources":["../../src/onboarding/tool-helpers.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,6EAA6E;AAC7E,gDAAgD;AAChD,gEAAgE;AAChE,6EAA6E;AAC7E,gEAAgE;AAChE,+EAA+E;AAC/E,uDAAuD;AACvD,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAG5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,
|
|
1
|
+
{"version":3,"file":"tool-helpers.js","sourceRoot":"","sources":["../../src/onboarding/tool-helpers.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,EAAE;AACF,6EAA6E;AAC7E,gDAAgD;AAChD,gEAAgE;AAChE,6EAA6E;AAC7E,gEAAgE;AAChE,+EAA+E;AAC/E,uDAAuD;AACvD,EAAE;AACF,6EAA6E;AAC7E,4EAA4E;AAG5E,OAAO,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,aAAa,EAAmB,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,0BAA0B,EAAiC,MAAM,gBAAgB,CAAC;AAc3F,SAAS,6BAA6B,CACpC,QAAoB,EACpB,MAAgC,EAChC,UAAmB;IAEnB,MAAM,UAAU,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,0BAA0B,CAAC;QACrC,QAAQ;QACR,MAAM;QACN,OAAO,EAAE,UAAU,CAAC,OAAO;QAC3B,QAAQ,EAAE,UAAU,CAAC,mBAAmB;QACxC,UAAU;KACX,CAAC,CAAC;IACH,6EAA6E;IAC7E,6EAA6E;IAC7E,wEAAwE;IACxE,sEAAsE;IACtE,MAAM,SAAS,GACb,MAAM,KAAK,SAAS;QAClB,CAAC,CAAC,GAAG,UAAU,CAAC,WAAW,kFAAkF,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;QAC7I,CAAC,CAAC,GAAG,UAAU,CAAC,WAAW,0CAA0C,UAAU,IAAI,YAAY,kCAAkC,CAAC;IAEtI,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,SAAS,EAAE,EAAE,CAAC;QAC3D,OAAO,EAAE;YACP,kBAAkB,EAAE;gBAClB,QAAQ;gBACR,MAAM;gBACN,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACpD;SACF;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAsB,EACtB,EAAqC;IAErC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,6BAA6B,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,EAAE,EAAE,CAAC;IACpB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,uBAAuB,EAAE,CAAC;YAC7C,OAAO,6BAA6B,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { ProviderId } from "./providers.js";
|
|
2
2
|
export type CredentialRequiredReason = "missing" | "stale";
|
|
3
|
+
export type ExternalToolRequiredReason = "not_installed" | "session_missing" | "session_stale";
|
|
3
4
|
export interface CredentialRequiredTagFields {
|
|
4
5
|
provider: ProviderId;
|
|
5
6
|
reason: CredentialRequiredReason;
|
|
@@ -21,6 +22,13 @@ export interface SkippedTagFields {
|
|
|
21
22
|
export interface ConnectedTagFields {
|
|
22
23
|
provider: ProviderId;
|
|
23
24
|
}
|
|
25
|
+
export interface ExternalToolRequiredTagFields {
|
|
26
|
+
provider: ProviderId;
|
|
27
|
+
reason: ExternalToolRequiredReason;
|
|
28
|
+
installCmd: string;
|
|
29
|
+
loginCmd?: string;
|
|
30
|
+
fallback: string | null;
|
|
31
|
+
}
|
|
24
32
|
export type ParsedTag = ({
|
|
25
33
|
kind: "credential_required";
|
|
26
34
|
} & CredentialRequiredTagFields) | ({
|
|
@@ -29,9 +37,12 @@ export type ParsedTag = ({
|
|
|
29
37
|
kind: "skipped";
|
|
30
38
|
} & SkippedTagFields) | ({
|
|
31
39
|
kind: "connected";
|
|
32
|
-
} & ConnectedTagFields)
|
|
40
|
+
} & ConnectedTagFields) | ({
|
|
41
|
+
kind: "external_tool_required";
|
|
42
|
+
} & ExternalToolRequiredTagFields);
|
|
33
43
|
export declare function buildCredentialRequiredTag(fields: CredentialRequiredTagFields): string;
|
|
34
44
|
export declare function buildSoftDegradedTag(fields: SoftDegradedTagFields): string;
|
|
35
45
|
export declare function buildSkippedTag(fields: SkippedTagFields): string;
|
|
36
46
|
export declare function buildConnectedTag(fields: ConnectedTagFields): string;
|
|
47
|
+
export declare function buildExternalToolRequiredTag(fields: ExternalToolRequiredTagFields): string;
|
|
37
48
|
export declare function parseToolTag(text: string): ParsedTag | undefined;
|
|
@@ -37,12 +37,12 @@ export function buildCredentialRequiredTag(fields) {
|
|
|
37
37
|
return `${parts.join(" ")}]`;
|
|
38
38
|
}
|
|
39
39
|
export function buildSoftDegradedTag(fields) {
|
|
40
|
-
return [
|
|
40
|
+
return `${[
|
|
41
41
|
"[OPENCANDLE_SOFT_DEGRADED",
|
|
42
42
|
formatField("provider", fields.provider),
|
|
43
43
|
formatField("fallback", fields.fallback),
|
|
44
44
|
`remediation=${quote(fields.remediation)}`,
|
|
45
|
-
].join(" ")
|
|
45
|
+
].join(" ")}]`;
|
|
46
46
|
}
|
|
47
47
|
export function buildSkippedTag(fields) {
|
|
48
48
|
const parts = [
|
|
@@ -59,16 +59,30 @@ export function buildSkippedTag(fields) {
|
|
|
59
59
|
export function buildConnectedTag(fields) {
|
|
60
60
|
return `[OPENCANDLE_CONNECTED provider=${fields.provider}]`;
|
|
61
61
|
}
|
|
62
|
+
export function buildExternalToolRequiredTag(fields) {
|
|
63
|
+
const parts = [
|
|
64
|
+
"[OPENCANDLE_EXTERNAL_TOOL_REQUIRED",
|
|
65
|
+
formatField("provider", fields.provider),
|
|
66
|
+
formatField("reason", fields.reason),
|
|
67
|
+
`installCmd=${quote(fields.installCmd)}`,
|
|
68
|
+
formatField("fallback", fields.fallback ?? "none"),
|
|
69
|
+
];
|
|
70
|
+
if (fields.loginCmd)
|
|
71
|
+
parts.push(`loginCmd=${quote(fields.loginCmd)}`);
|
|
72
|
+
return `${parts.join(" ")}]`;
|
|
73
|
+
}
|
|
62
74
|
// -----------------------------------------------------------------------------
|
|
63
75
|
// Parser
|
|
64
76
|
// -----------------------------------------------------------------------------
|
|
65
|
-
const TAG_LINE_REGEX = /\[OPENCANDLE_(CREDENTIAL_REQUIRED|SOFT_DEGRADED|SKIPPED|CONNECTED)([^\]]*)\]/;
|
|
77
|
+
const TAG_LINE_REGEX = /\[OPENCANDLE_(CREDENTIAL_REQUIRED|SOFT_DEGRADED|SKIPPED|CONNECTED|EXTERNAL_TOOL_REQUIRED)([^\]]*)\]/;
|
|
66
78
|
function parseFields(raw) {
|
|
67
79
|
// Split on `key=value` pairs, respecting quoted values.
|
|
68
80
|
const fields = {};
|
|
69
81
|
const pattern = /(\w+)=("((?:[^"\\]|\\.)*)"|([^\s\]]+))/g;
|
|
70
|
-
|
|
71
|
-
|
|
82
|
+
while (true) {
|
|
83
|
+
const match = pattern.exec(raw);
|
|
84
|
+
if (!match)
|
|
85
|
+
break;
|
|
72
86
|
const key = match[1];
|
|
73
87
|
const value = match[3] !== undefined ? match[3].replace(/\\"/g, '"') : match[4];
|
|
74
88
|
fields[key] = value;
|
|
@@ -142,6 +156,24 @@ export function parseToolTag(text) {
|
|
|
142
156
|
return undefined;
|
|
143
157
|
return { kind: "connected", provider: provider };
|
|
144
158
|
}
|
|
159
|
+
case "EXTERNAL_TOOL_REQUIRED": {
|
|
160
|
+
const { provider, reason, installCmd, loginCmd, fallback } = fields;
|
|
161
|
+
if (!provider ||
|
|
162
|
+
(reason !== "not_installed" &&
|
|
163
|
+
reason !== "session_missing" &&
|
|
164
|
+
reason !== "session_stale") ||
|
|
165
|
+
!installCmd) {
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
kind: "external_tool_required",
|
|
170
|
+
provider: provider,
|
|
171
|
+
reason,
|
|
172
|
+
installCmd,
|
|
173
|
+
loginCmd,
|
|
174
|
+
fallback: fallback === undefined || fallback === "none" ? null : fallback,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
145
177
|
default:
|
|
146
178
|
return undefined;
|
|
147
179
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-tags.js","sourceRoot":"","sources":["../../src/onboarding/tool-tags.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,8EAA8E;AAC9E,+EAA+E;AAC/E,wEAAwE;AACxE,aAAa;AACb,EAAE;AACF,uCAAuC;AACvC,sDAAsD;AACtD,EAAE;AACF,iBAAiB;AACjB,kFAAkF;AAClF,wEAAwE;AACxE,yEAAyE;AACzE,iCAAiC;AACjC,EAAE;AACF,6DAA6D;
|
|
1
|
+
{"version":3,"file":"tool-tags.js","sourceRoot":"","sources":["../../src/onboarding/tool-tags.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ApiKeyProviderId } from "./providers.js";
|
|
2
2
|
export type ValidationResult = {
|
|
3
3
|
status: "valid";
|
|
4
4
|
} | {
|
|
@@ -16,4 +16,4 @@ export type ValidationResult = {
|
|
|
16
16
|
* This function is side-effect-free beyond the network call: it does not
|
|
17
17
|
* touch the config file, onboarding state, or any in-memory cache.
|
|
18
18
|
*/
|
|
19
|
-
export declare function validateCredential(providerId:
|
|
19
|
+
export declare function validateCredential(providerId: ApiKeyProviderId, key: string): Promise<ValidationResult>;
|
|
@@ -70,7 +70,7 @@ function classifyAlphaVantageBody(body) {
|
|
|
70
70
|
if (typeof errorMessage === "string" && errorMessage.length > 0) {
|
|
71
71
|
return { status: "invalid", message: errorMessage };
|
|
72
72
|
}
|
|
73
|
-
const information = parsed
|
|
73
|
+
const information = parsed.Information;
|
|
74
74
|
if (typeof information === "string" && /invalid api/i.test(information)) {
|
|
75
75
|
return { status: "invalid", message: information };
|
|
76
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/onboarding/validation.ts"],"names":[],"mappings":"AAAA,mEAAmE;AACnE,EAAE;AACF,qEAAqE;AACrE,2EAA2E;AAC3E,4BAA4B;AAC5B,EAAE;AACF,mEAAmE;AACnE,uEAAuE;AACvE,+DAA+D;AAC/D,4EAA4E;AAC5E,2EAA2E;AAC3E,6DAA6D;AAC7D,EAAE;AACF,2EAA2E;AAC3E,2EAA2E;AAC3E,6EAA6E;AAC7E,oEAAoE;AACpE,uEAAuE;AACvE,EAAE;AACF,2EAA2E;AAC3E,yDAAyD;AAIzD,MAAM,qBAAqB,GAAG,KAAK,CAAC;AASpC,KAAK,UAAU,iBAAiB,CAC9B,GAAW,EACX,IAAiB,EACjB,YAA6B;IAE7B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,GAAG,IAAI;YACP,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,qBAAqB,CAAC;SACnD,CAAC,CAAC;QAEH,oDAAoD;QACpD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACvD,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC5D,CAAC;QAED,yDAAyD;QACzD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,CAAC;QAChD,CAAC;QAED,wEAAwE;QACxE,uEAAuE;QACvE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACpE,CAAC;QAED,wEAAwE;QACxE,yBAAyB;QACzB,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YACtC,IAAI,UAAU;gBAAE,OAAO,UAAU,CAAC;QACpC,CAAC;QAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IAC7B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAChE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,wBAAwB,CAAC,IAAY;IAC5C,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;QAC3D,MAAM,YAAY,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAC7C,IAAI,OAAO,YAAY,KAAK,QAAQ,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;QACtD,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/onboarding/validation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import type { InstrumentCandidate } from "../market-state/resolve.js";
|
|
2
3
|
import type { RouterLlmClient } from "../routing/router-types.js";
|
|
3
4
|
import type { AskUserHandler } from "../types/index.js";
|
|
4
5
|
export interface OpenCandleExtensionOptions {
|
|
@@ -8,5 +9,12 @@ export interface OpenCandleExtensionOptions {
|
|
|
8
9
|
* of the pi-ai-backed default. Intended for tests + offline eval runners.
|
|
9
10
|
*/
|
|
10
11
|
routerLlmClient?: RouterLlmClient;
|
|
12
|
+
symbolSearch?: (query: string) => Promise<InstrumentCandidate[]>;
|
|
13
|
+
/**
|
|
14
|
+
* Optional completion function for LLM session titles. When omitted, the
|
|
15
|
+
* extension resolves a pi-ai client from the session's current model.
|
|
16
|
+
* Intended for tests + offline runners.
|
|
17
|
+
*/
|
|
18
|
+
titleCompletion?: (prompt: string) => Promise<string>;
|
|
11
19
|
}
|
|
12
20
|
export default function openCandleExtension(pi: ExtensionAPI, options?: OpenCandleExtensionOptions): void;
|