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
package/README.md
CHANGED
|
@@ -1,125 +1,89 @@
|
|
|
1
1
|
# OpenCandle
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
```bash
|
|
4
|
+
npx opencandle
|
|
5
|
+
# or
|
|
6
|
+
npx opencandle gui
|
|
7
|
+
```
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
OpenCandle is an open source financial investigator: a terminal agent and local browser workbench for market research that starts from real provider data, shows source gaps, and keeps risk visible.
|
|
6
10
|
|
|
7
|
-
-
|
|
8
|
-
- Open the local GUI for chat, tool discovery, provider status, and session history
|
|
9
|
-
- Extend OpenCandle with new tools, providers, or Pi-compatible add-on packages
|
|
11
|
+
[Docs](./docs/index.md) | [First run](./docs/first-run.md) | [GUI quickstart](./docs/gui-quickstart.md) | [Data sources](./docs/data-sources.md) | [Build a tool](./docs/build-a-tool.md)
|
|
10
12
|
|
|
11
|
-
|
|
13
|
+
## See It Work
|
|
12
14
|
|
|
13
|
-
|
|
15
|
+
### Terminal UI
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
[](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-tui.mp4)
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
[Watch the terminal UI demo](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-tui.mp4) | [Download MP4](https://github.com/Kahtaf/OpenCandle/raw/refs/heads/main/assets/opencandle-tui.mp4)
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
### Local GUI
|
|
20
22
|
|
|
21
|
-
|
|
22
|
-
- Options chains with locally computed Greeks
|
|
23
|
-
- Company fundamentals, earnings, and SEC filings
|
|
24
|
-
- FRED macro series and the alternative.me crypto Fear & Greed index
|
|
25
|
-
- Reddit-based sentiment and discussion lookups
|
|
26
|
-
- Portfolio tracking, watchlists, correlation, and risk analysis
|
|
27
|
-
- Multi-step workflows such as `/analyze NVDA`
|
|
28
|
-
- Clarifying follow-ups when a ticker, goal, horizon, or risk profile is ambiguous
|
|
29
|
-
- Source-gap and stale-data warnings when a provider is missing, delayed, or unavailable
|
|
23
|
+
[](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-gui.mp4)
|
|
30
24
|
|
|
31
|
-
|
|
25
|
+
[Watch the local GUI demo](https://cdn.jsdelivr.net/gh/Kahtaf/OpenCandle@main/assets/opencandle-gui.mp4) | [Download MP4](https://github.com/Kahtaf/OpenCandle/raw/refs/heads/main/assets/opencandle-gui.mp4)
|
|
32
26
|
|
|
33
|
-
|
|
27
|
+
## Why OpenCandle
|
|
34
28
|
|
|
35
|
-
|
|
29
|
+
Most finance agents answer too early. OpenCandle is built around the opposite loop: understand the question, gather market evidence, disclose missing or stale data, then synthesize.
|
|
36
30
|
|
|
37
|
-
|
|
31
|
+
Use it when a question needs inspectable evidence:
|
|
38
32
|
|
|
39
|
-
|
|
33
|
+
- What is this stock or crypto trading at right now?
|
|
34
|
+
- How do two companies compare across price action, fundamentals, filings, and sentiment?
|
|
35
|
+
- What does the options chain imply, and where are the Greeks?
|
|
36
|
+
- How exposed is my local portfolio or watchlist?
|
|
37
|
+
- What macro series, filings, or sentiment sources support the answer?
|
|
40
38
|
|
|
41
|
-
|
|
42
|
-
npm install -g opencandle
|
|
43
|
-
opencandle
|
|
39
|
+
OpenCandle is read-only research software. It does not place trades, route orders, or provide financial advice.
|
|
44
40
|
|
|
45
|
-
|
|
46
|
-
npx opencandle@latest
|
|
47
|
-
```
|
|
41
|
+
## Highlights
|
|
48
42
|
|
|
49
|
-
|
|
43
|
+
| Capability | What it gives you |
|
|
44
|
+
| --- | --- |
|
|
45
|
+
| Terminal agent | Fast keyboard-driven research inside Pi's local TUI, with sessions, slash commands, model setup, and saved transcripts. |
|
|
46
|
+
| Local browser GUI | Chat, session history, provider setup, tool discovery, workflow launches, and richer financial result cards at `http://127.0.0.1:14567`. |
|
|
47
|
+
| Evidence-first answers | Tools fetch and format data; the model synthesizes only after evidence is gathered. |
|
|
48
|
+
| Finance routing | Quote lookup, comparison, portfolio review, options strategy, filing checks, macro questions, sentiment reads, and educational prompts route differently. |
|
|
49
|
+
| Provider transparency | Missing keys, degraded sources, stale cache, and unavailable data are surfaced instead of hidden. |
|
|
50
|
+
| Local state | OpenCandle user state lives under `~/.opencandle/` unless `OPENCANDLE_HOME` is set; durable market state is stored in SQLite at `state.db`. |
|
|
51
|
+
| Extensible tools | TypeScript tool APIs, provider boundaries, workflow builders, and package exports for add-on tools. |
|
|
52
|
+
| Eval harness | Unit tests, live provider checks, CLI e2e, GUI browser smoke tests, and competitive finance evals. |
|
|
50
53
|
|
|
51
|
-
|
|
52
|
-
npm install
|
|
53
|
-
cp .env.example .env
|
|
54
|
-
npm start
|
|
55
|
-
```
|
|
54
|
+
## Quick Start
|
|
56
55
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
On first run, OpenCandle walks you through model setup. You can rerun that flow later with `/setup`.
|
|
56
|
+
Requires Node.js `^20.19.0`, `^22.12.0`, or `>=24.0.0 <27`.
|
|
60
57
|
|
|
61
|
-
|
|
58
|
+
```bash
|
|
59
|
+
npx opencandle
|
|
60
|
+
```
|
|
62
61
|
|
|
63
|
-
|
|
62
|
+
On first run, OpenCandle walks you through model setup. You can use Pi sign-in when available or provide a model API key. Data-provider keys are separate and optional.
|
|
64
63
|
|
|
65
|
-
|
|
64
|
+
Start the GUI instead:
|
|
66
65
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
| `GEMINI_API_KEY` | No | Google models through Pi |
|
|
70
|
-
| `OPENAI_API_KEY` | No | OpenAI models through Pi |
|
|
71
|
-
| `ANTHROPIC_API_KEY` | No | Anthropic models through Pi |
|
|
72
|
-
| `ALPHA_VANTAGE_API_KEY` | No | Fundamentals, earnings, financial statements |
|
|
73
|
-
| `FRED_API_KEY` | No | Macro series such as rates, CPI, GDP, unemployment |
|
|
74
|
-
| `BRAVE_API_KEY` | No | Brave web search fallback |
|
|
75
|
-
| `EXA_API_KEY` | No | Exa web search |
|
|
76
|
-
| `FINNHUB_API_KEY` | No | Finnhub company news for sentiment summaries |
|
|
77
|
-
| `OPENCANDLE_HOME` | No | Override OpenCandle state directory |
|
|
78
|
-
| `OPENCANDLE_ROUTER_MODE` | No | Advanced request-understanding mode; keep the default unless debugging |
|
|
79
|
-
| `OPENCANDLE_TOOL_SCOPE_MODE` | No | `observe` by default; set `enforce` to apply route-selected active tools |
|
|
80
|
-
| `OPENCANDLE_DEBATE` | No | Set `false` or `0` to disable bull/bear debate |
|
|
81
|
-
| `OPENCANDLE_GUI_HOST` | No | GUI bind host, default `127.0.0.1` |
|
|
82
|
-
| `OPENCANDLE_GUI_PORT` | No | GUI port, default `14567` |
|
|
83
|
-
|
|
84
|
-
Yahoo Finance, CoinGecko, Reddit, SEC EDGAR, DuckDuckGo search, and the alternative.me crypto Fear & Greed index do not require keys.
|
|
85
|
-
|
|
86
|
-
OpenCandle stores its own user state in `~/.opencandle/` by default. Pi configuration stays in `.pi/` and `~/.pi/agent/`. The CLI should not depend on repo-local `.pi/extensions/`.
|
|
87
|
-
|
|
88
|
-
Provider keys can also be stored in `~/.opencandle/config.json`:
|
|
89
|
-
|
|
90
|
-
```json
|
|
91
|
-
{
|
|
92
|
-
"providers": {
|
|
93
|
-
"alphaVantage": {
|
|
94
|
-
"apiKey": "..."
|
|
95
|
-
},
|
|
96
|
-
"fred": {
|
|
97
|
-
"apiKey": "..."
|
|
98
|
-
},
|
|
99
|
-
"brave": {
|
|
100
|
-
"apiKey": "..."
|
|
101
|
-
},
|
|
102
|
-
"exa": {
|
|
103
|
-
"apiKey": "..."
|
|
104
|
-
},
|
|
105
|
-
"finnhub": {
|
|
106
|
-
"apiKey": "..."
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
66
|
+
```bash
|
|
67
|
+
npx opencandle gui
|
|
110
68
|
```
|
|
111
69
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
See [docs/configuration.md](./docs/configuration.md) for the full env var, file config, state file, and GUI runtime reference.
|
|
70
|
+
Then open `http://127.0.0.1:14567`.
|
|
115
71
|
|
|
116
|
-
|
|
72
|
+
For a five-minute path from install to a successful answer, see [docs/first-run.md](./docs/first-run.md).
|
|
117
73
|
|
|
118
|
-
|
|
74
|
+
## Example Prompts
|
|
119
75
|
|
|
120
|
-
|
|
76
|
+
```text
|
|
77
|
+
/analyze NVDA
|
|
78
|
+
What is AAPL trading at?
|
|
79
|
+
Compare MSFT and GOOGL using price, fundamentals, and sentiment
|
|
80
|
+
Show me TSLA puts with Greeks
|
|
81
|
+
Get the fed funds rate from FRED
|
|
82
|
+
Add 100 shares of NVDA at 120 to my portfolio, then show my portfolio
|
|
83
|
+
Run risk analysis on SPY
|
|
84
|
+
```
|
|
121
85
|
|
|
122
|
-
Useful commands:
|
|
86
|
+
Useful slash commands:
|
|
123
87
|
|
|
124
88
|
```text
|
|
125
89
|
/setup
|
|
@@ -129,66 +93,112 @@ Useful commands:
|
|
|
129
93
|
/analyze AAPL
|
|
130
94
|
```
|
|
131
95
|
|
|
132
|
-
|
|
96
|
+
Provider diagnostics run from your shell:
|
|
133
97
|
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
Show me MSFT puts with Greeks
|
|
138
|
-
Get the fed funds rate from FRED
|
|
139
|
-
Add 100 shares of NVDA at 120 to my portfolio, then show my portfolio
|
|
140
|
-
Run risk analysis on SPY
|
|
98
|
+
```bash
|
|
99
|
+
opencandle doctor
|
|
100
|
+
opencandle doctor --enable twitter
|
|
141
101
|
```
|
|
142
102
|
|
|
143
|
-
##
|
|
103
|
+
## Data Sources
|
|
144
104
|
|
|
145
|
-
|
|
105
|
+
| Area | Examples | Source |
|
|
106
|
+
| --- | --- | --- |
|
|
107
|
+
| Market data | Quotes, history, ticker search, crypto price and history | Yahoo Finance, Alpha Vantage fallback when configured, CoinGecko |
|
|
108
|
+
| Options | Chains, open interest, IV, locally computed Greeks | Yahoo Finance plus local calculations |
|
|
109
|
+
| Fundamentals | Overview, financials, earnings, DCF, comparable companies | Alpha Vantage |
|
|
110
|
+
| Macro | Rates, CPI, GDP, unemployment, crypto Fear & Greed | FRED, alternative.me |
|
|
111
|
+
| Technical | Indicators and strategy backtests | Local calculations over market history |
|
|
112
|
+
| Sentiment | Reddit, Twitter/X, Finnhub news, and web sentiment | `rdt-cli` and `twitter-cli` using your normal browser sessions, Finnhub, Exa, Brave, DuckDuckGo |
|
|
113
|
+
| Filings | SEC filing search | SEC EDGAR |
|
|
114
|
+
| Portfolio | Watchlists, holdings, prediction tracking, correlation, risk | Local state plus market data |
|
|
146
115
|
|
|
147
|
-
|
|
148
|
-
opencandle gui
|
|
149
|
-
# or from a checkout
|
|
150
|
-
npm run gui
|
|
151
|
-
```
|
|
116
|
+
Yahoo Finance, CoinGecko, SEC EDGAR, DuckDuckGo search, and the alternative.me crypto Fear & Greed index do not require OpenCandle provider keys. Reddit sentiment requires `rdt-cli` (`uv tool install rdt-cli`) plus an active Reddit session in your normal browser. Twitter/X sentiment requires `twitter-cli` (`uv tool install twitter-cli`) plus an active x.com session in your normal browser. Alpha Vantage, FRED, Brave, Exa, and Finnhub unlock deeper coverage when configured.
|
|
152
117
|
|
|
153
|
-
|
|
118
|
+
## Configuration
|
|
154
119
|
|
|
155
|
-
|
|
120
|
+
Model access comes from Pi. Market data provider keys can be set in the environment, through `/connect`, through the GUI provider setup flow, or in `~/.opencandle/config.json`.
|
|
156
121
|
|
|
157
|
-
|
|
122
|
+
| Key | Used For |
|
|
123
|
+
| --- | --- |
|
|
124
|
+
| `GEMINI_API_KEY` | Google models through Pi |
|
|
125
|
+
| `OPENAI_API_KEY` | OpenAI models through Pi |
|
|
126
|
+
| `ANTHROPIC_API_KEY` | Anthropic models through Pi |
|
|
127
|
+
| `ALPHA_VANTAGE_API_KEY` | Fundamentals, earnings, financial statements, DCF, comps |
|
|
128
|
+
| `FRED_API_KEY` | Macro series such as rates, CPI, GDP, unemployment |
|
|
129
|
+
| `BRAVE_API_KEY` | Brave web search fallback |
|
|
130
|
+
| `EXA_API_KEY` | Exa web search |
|
|
131
|
+
| `FINNHUB_API_KEY` | Finnhub company news for sentiment summaries |
|
|
132
|
+
| `OPENCANDLE_HOME` | Override OpenCandle state directory |
|
|
133
|
+
| `OPENCANDLE_GUI_HOST` | GUI bind host, default `127.0.0.1` |
|
|
134
|
+
| `OPENCANDLE_GUI_PORT` | GUI port, default `14567` |
|
|
135
|
+
| `OPENCANDLE_NOTIFICATION_WEBHOOK_URL` | Optional local webhook target for alert/report notification delivery attempts |
|
|
158
136
|
|
|
159
|
-
|
|
137
|
+
Environment variables override `~/.opencandle/config.json`. See [docs/configuration.md](./docs/configuration.md) for the full reference, including advanced routing and diagnostic switches.
|
|
160
138
|
|
|
161
|
-
##
|
|
139
|
+
## From Source
|
|
162
140
|
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
| Portfolio | watchlist, prediction tracking, correlation, risk | Local state plus market data |
|
|
141
|
+
```bash
|
|
142
|
+
git clone https://github.com/Kahtaf/OpenCandle.git
|
|
143
|
+
cd OpenCandle
|
|
144
|
+
npm install
|
|
145
|
+
cp .env.example .env
|
|
146
|
+
npm start
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
On Windows Command Prompt, use `copy .env.example .env` instead of `cp .env.example .env`.
|
|
173
150
|
|
|
174
|
-
|
|
151
|
+
Run the local GUI from a checkout:
|
|
175
152
|
|
|
176
|
-
|
|
153
|
+
```bash
|
|
154
|
+
npm run gui
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## How It Fits Together
|
|
158
|
+
|
|
159
|
+
```text
|
|
160
|
+
User prompt
|
|
161
|
+
-> routing and slot resolution
|
|
162
|
+
-> tools and workflows gather provider-backed evidence
|
|
163
|
+
-> provider gaps, stale data, and warnings are preserved
|
|
164
|
+
-> model synthesizes a risk-aware answer
|
|
165
|
+
-> terminal or GUI session records the trace
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Project shape:
|
|
177
169
|
|
|
178
170
|
```text
|
|
179
171
|
src/
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
172
|
+
|-- providers/ API clients
|
|
173
|
+
|-- tools/ Tool implementations by domain
|
|
174
|
+
|-- infra/ Cache, rate limiter, HTTP client, paths
|
|
175
|
+
|-- routing/ Request understanding, entity extraction, slot resolution
|
|
176
|
+
|-- workflows/ WorkflowDefinition builders
|
|
177
|
+
|-- runtime/ Session coordinator, workflow runner, runtime context
|
|
178
|
+
|-- market-state/ Durable watchlists, portfolios, predictions, alerts, reports
|
|
179
|
+
|-- memory/ SQLite-backed state and retrieval
|
|
180
|
+
|-- sentiment/ Cross-source sentiment pipeline, scoring, adapters, trends
|
|
181
|
+
|-- analysts/ Multi-analyst orchestration
|
|
182
|
+
|-- pi/ Pi integration and session wiring
|
|
183
|
+
|-- cli.ts CLI entry point
|
|
184
|
+
|-- monitor.ts Local automation heartbeat command
|
|
185
|
+
|-- tool-kit.ts Public add-on tool helpers
|
|
186
|
+
`-- index.ts Public package exports
|
|
189
187
|
```
|
|
190
188
|
|
|
191
|
-
|
|
189
|
+
Package exports:
|
|
190
|
+
|
|
191
|
+
- `opencandle`
|
|
192
|
+
- `opencandle/tool-kit`
|
|
193
|
+
- `opencandle/infra`
|
|
194
|
+
- `opencandle/types`
|
|
195
|
+
- `opencandle/providers`
|
|
196
|
+
- `opencandle/tools`
|
|
197
|
+
- `opencandle/workflows`
|
|
198
|
+
|
|
199
|
+
If you want to add a new first-party tool or publish an add-on package, start with [docs/build-a-tool.md](./docs/build-a-tool.md).
|
|
200
|
+
|
|
201
|
+
## Development
|
|
192
202
|
|
|
193
203
|
```bash
|
|
194
204
|
npm start
|
|
@@ -204,35 +214,23 @@ npm run test:evals:product
|
|
|
204
214
|
npm run test:evals:competitive
|
|
205
215
|
```
|
|
206
216
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
The e2e, provider, and eval commands can hit live APIs, live model providers, or local agent CLIs. Run them intentionally; see [docs/testing-and-evals.md](./docs/testing-and-evals.md).
|
|
210
|
-
|
|
211
|
-
### Repository Rules That Matter
|
|
212
|
-
|
|
213
|
-
- TDD is mandatory for behavior changes
|
|
214
|
-
- Unit tests mock `globalThis.fetch` and use JSON fixtures
|
|
215
|
-
- Use `cache` and `rateLimiter` for external calls
|
|
216
|
-
- Tools fetch and format data; analysts and prompts synthesize
|
|
217
|
-
- Keep typing strict and use `.js` extensions on relative imports
|
|
218
|
-
|
|
219
|
-
### Public Package Exports
|
|
217
|
+
Baseline check:
|
|
220
218
|
|
|
221
|
-
|
|
219
|
+
```bash
|
|
220
|
+
npm test
|
|
221
|
+
```
|
|
222
222
|
|
|
223
|
-
-
|
|
224
|
-
- `opencandle/tool-kit`
|
|
225
|
-
- `opencandle/infra`
|
|
226
|
-
- `opencandle/types`
|
|
227
|
-
- `opencandle/providers`
|
|
228
|
-
- `opencandle/tools`
|
|
229
|
-
- `opencandle/workflows`
|
|
223
|
+
The e2e, provider, and eval commands can hit live APIs, live model providers, or local agent CLIs. Run them intentionally; see [docs/testing-and-evals.md](./docs/testing-and-evals.md).
|
|
230
224
|
|
|
231
|
-
|
|
225
|
+
Repository rules that matter:
|
|
232
226
|
|
|
233
|
-
|
|
227
|
+
- Unit tests mock `globalThis.fetch` and use fixture JSON.
|
|
228
|
+
- External calls go through shared cache and rate-limiter infrastructure.
|
|
229
|
+
- Tools fetch and format; analysts and prompts synthesize.
|
|
230
|
+
- Relative TypeScript imports use `.js` extensions.
|
|
231
|
+
- Behavior changes should be test-first.
|
|
234
232
|
|
|
235
|
-
For
|
|
233
|
+
For scripted full-session driving with file-based IPC:
|
|
236
234
|
|
|
237
235
|
```bash
|
|
238
236
|
npx tsx tests/harness/cli.ts run --prompt "What is AAPL trading at?" --ipc /tmp/opencandle-ipc &
|
|
@@ -240,35 +238,21 @@ npx tsx tests/harness/cli.ts wait --ipc /tmp/opencandle-ipc
|
|
|
240
238
|
npx tsx tests/harness/cli.ts trace --ipc /tmp/opencandle-ipc
|
|
241
239
|
```
|
|
242
240
|
|
|
243
|
-
|
|
241
|
+
See [tests/harness/README.md](./tests/harness/README.md) for the full flow.
|
|
244
242
|
|
|
245
|
-
##
|
|
243
|
+
## Documentation
|
|
246
244
|
|
|
247
|
-
- [
|
|
248
|
-
- [
|
|
249
|
-
- [
|
|
250
|
-
- [
|
|
251
|
-
- [
|
|
252
|
-
- [
|
|
253
|
-
- [
|
|
254
|
-
- [
|
|
255
|
-
- [
|
|
256
|
-
- [
|
|
257
|
-
- [docs/benchmarking.md](./docs/benchmarking.md)
|
|
258
|
-
- [CONTRIBUTING.md](./CONTRIBUTING.md)
|
|
259
|
-
- [docs/build-a-tool.md](./docs/build-a-tool.md)
|
|
260
|
-
- [tests/harness/README.md](./tests/harness/README.md)
|
|
261
|
-
- [CHANGELOG.md](./CHANGELOG.md)
|
|
262
|
-
- [SECURITY.md](./SECURITY.md)
|
|
263
|
-
- [LICENSE](./LICENSE)
|
|
245
|
+
- [Getting Started](./docs/getting-started.md)
|
|
246
|
+
- [First Run](./docs/first-run.md)
|
|
247
|
+
- [TUI](./docs/tui.md)
|
|
248
|
+
- [GUI Quickstart](./docs/gui-quickstart.md)
|
|
249
|
+
- [Investigation Recipes](./docs/investigation-recipes.md)
|
|
250
|
+
- [Data Sources](./docs/data-sources.md)
|
|
251
|
+
- [Configuration](./docs/configuration.md)
|
|
252
|
+
- [System Architecture](./docs/system-architecture.md)
|
|
253
|
+
- [Testing and Evals](./docs/testing-and-evals.md)
|
|
254
|
+
- [Benchmarking](./docs/benchmarking.md)
|
|
264
255
|
|
|
265
|
-
##
|
|
266
|
-
|
|
267
|
-
The static website lives in [website/](./website/). It builds a product landing page plus the public Markdown docs into `website/dist/`.
|
|
268
|
-
|
|
269
|
-
```bash
|
|
270
|
-
npm run docs:site:build
|
|
271
|
-
npm run docs:site:serve
|
|
272
|
-
```
|
|
256
|
+
## License
|
|
273
257
|
|
|
274
|
-
|
|
258
|
+
MIT
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import type { AnalystOutput, AnalystSignal, DebateSide, DebateOutput } from "../runtime/workflow-types.js";
|
|
2
1
|
import type { EvidenceRecord } from "../runtime/evidence.js";
|
|
2
|
+
import type { AnalystOutput, AnalystSignal, DebateOutput, DebateSide } from "../runtime/workflow-types.js";
|
|
3
3
|
/** All analyst roles. */
|
|
4
4
|
export type AnalystRole = "valuation" | "momentum" | "options" | "contrarian" | "risk";
|
|
5
|
-
/** Evidence fields expected per analyst role. */
|
|
6
|
-
export declare const ROLE_EXPECTED_EVIDENCE: Record<AnalystRole, string[]>;
|
|
7
5
|
/**
|
|
8
6
|
* Parse an LLM response into a structured AnalystOutput.
|
|
9
7
|
* Falls back to raw text if parsing fails.
|
|
@@ -1,11 +1,3 @@
|
|
|
1
|
-
/** Evidence fields expected per analyst role. */
|
|
2
|
-
export const ROLE_EXPECTED_EVIDENCE = {
|
|
3
|
-
valuation: ["P/E Ratio", "Forward P/E", "EPS", "Intrinsic Value", "Revenue Growth"],
|
|
4
|
-
momentum: ["RSI", "MACD", "SMA 50", "SMA 200", "Volume Trend"],
|
|
5
|
-
options: ["Put/Call Ratio", "IV Level", "Unusual Volume", "Max Pain"],
|
|
6
|
-
contrarian: ["Fear & Greed Index", "Reddit Sentiment", "Sentiment Score"],
|
|
7
|
-
risk: ["Annualized Volatility", "Sharpe Ratio", "Max Drawdown", "VaR 95%", "Position Size"],
|
|
8
|
-
};
|
|
9
1
|
/**
|
|
10
2
|
* Parse an LLM response into a structured AnalystOutput.
|
|
11
3
|
* Falls back to raw text if parsing fails.
|
|
@@ -65,9 +57,7 @@ export function tallyVotes(outputs) {
|
|
|
65
57
|
const signalValue = output.signal === "BUY" ? 1 : output.signal === "SELL" ? -1 : 0;
|
|
66
58
|
weightedSum += signalValue * output.conviction;
|
|
67
59
|
}
|
|
68
|
-
const weightedConviction = totalWeight > 0
|
|
69
|
-
? Math.round((totalWeight / outputs.length) * 10) / 10
|
|
70
|
-
: 0;
|
|
60
|
+
const weightedConviction = totalWeight > 0 ? Math.round((totalWeight / outputs.length) * 10) / 10 : 0;
|
|
71
61
|
let verdict;
|
|
72
62
|
if (weightedSum > 0)
|
|
73
63
|
verdict = "BUY";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/analysts/contracts.ts"],"names":[],"mappings":"AAWA
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/analysts/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { WorkflowDefinition } from "../runtime/prompt-step.js";
|
|
1
2
|
export type AnalystRole = "valuation" | "momentum" | "options" | "contrarian" | "risk";
|
|
2
3
|
export declare function buildBullPrompt(symbol: string): string;
|
|
3
4
|
export declare function buildBearPrompt(symbol: string): string;
|
|
@@ -7,10 +8,7 @@ export declare function getInitialAnalysisPrompt(symbol: string): string;
|
|
|
7
8
|
export interface ComprehensiveAnalysisOptions {
|
|
8
9
|
debate?: boolean;
|
|
9
10
|
}
|
|
10
|
-
export declare function getComprehensiveAnalysisPrompts(symbol: string, options?: ComprehensiveAnalysisOptions): string[];
|
|
11
|
-
import type { WorkflowDefinition } from "../runtime/prompt-step.js";
|
|
12
11
|
export declare function buildComprehensiveAnalysisDefinition(symbol: string, options?: ComprehensiveAnalysisOptions): WorkflowDefinition;
|
|
13
|
-
export declare function runComprehensiveAnalysis(enqueueFollowUp: (prompt: string) => void, symbol: string, options?: ComprehensiveAnalysisOptions): void;
|
|
14
12
|
export declare function isAnalysisRequest(input: string): {
|
|
15
13
|
match: boolean;
|
|
16
14
|
symbol?: string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { promptStep } from "../runtime/prompt-step.js";
|
|
1
2
|
const SYMBOL_CAPTURE = "(\\$?[A-Za-z]{1,5}(?:[./-][A-Za-z]{1,2})?)";
|
|
2
3
|
const NORMALIZED_SYMBOL_PATTERN = /^[A-Z]{1,5}(?:[./-][A-Z]{1,2})?$/;
|
|
3
4
|
const VOTING_INSTRUCTION = `
|
|
@@ -138,27 +139,6 @@ const VALIDATION_PROMPT_NO_DEBATE = (symbol) => `**[Validation Check]** Review y
|
|
|
138
139
|
export function getInitialAnalysisPrompt(symbol) {
|
|
139
140
|
return `Begin comprehensive analysis of ${symbol}. Start by getting the current stock quote.`;
|
|
140
141
|
}
|
|
141
|
-
export function getComprehensiveAnalysisPrompts(symbol, options) {
|
|
142
|
-
const debate = options?.debate ?? true;
|
|
143
|
-
const roles = ["valuation", "momentum", "options", "contrarian", "risk"];
|
|
144
|
-
const prompts = [getInitialAnalysisPrompt(symbol)];
|
|
145
|
-
for (const role of roles) {
|
|
146
|
-
prompts.push(ANALYST_PROMPTS[role](symbol));
|
|
147
|
-
}
|
|
148
|
-
if (debate) {
|
|
149
|
-
prompts.push(buildBullPrompt(symbol));
|
|
150
|
-
prompts.push(buildBearPrompt(symbol));
|
|
151
|
-
prompts.push(buildRebuttalPrompt(symbol));
|
|
152
|
-
prompts.push(buildSynthesisPrompt(symbol));
|
|
153
|
-
prompts.push(VALIDATION_PROMPT_DEBATE(symbol));
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
prompts.push(SYNTHESIS_PROMPT_NO_DEBATE(symbol));
|
|
157
|
-
prompts.push(VALIDATION_PROMPT_NO_DEBATE(symbol));
|
|
158
|
-
}
|
|
159
|
-
return prompts;
|
|
160
|
-
}
|
|
161
|
-
import { promptStep } from "../runtime/prompt-step.js";
|
|
162
142
|
export function buildComprehensiveAnalysisDefinition(symbol, options) {
|
|
163
143
|
const debate = options?.debate ?? true;
|
|
164
144
|
const roles = ["valuation", "momentum", "options", "contrarian", "risk"];
|
|
@@ -218,11 +198,6 @@ export function buildComprehensiveAnalysisDefinition(symbol, options) {
|
|
|
218
198
|
],
|
|
219
199
|
};
|
|
220
200
|
}
|
|
221
|
-
export function runComprehensiveAnalysis(enqueueFollowUp, symbol, options) {
|
|
222
|
-
for (const prompt of getComprehensiveAnalysisPrompts(symbol, options).slice(1)) {
|
|
223
|
-
enqueueFollowUp(prompt);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
201
|
export function isAnalysisRequest(input) {
|
|
227
202
|
const patterns = [
|
|
228
203
|
new RegExp(`^analyze\\s+${SYMBOL_CAPTURE}\\s*$`, "i"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/analysts/orchestrator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../../src/analysts/orchestrator.ts"],"names":[],"mappings":"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"}
|