opencandle 0.11.1 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +50 -186
- package/dist/analysts/contracts.js +0 -1
- package/dist/analysts/orchestrator.js +0 -1
- package/dist/cli-main.js +22 -15
- package/dist/cli-options.d.ts +4 -0
- package/dist/cli-options.js +33 -0
- package/dist/cli.js +8 -3
- package/dist/config.d.ts +4 -0
- package/dist/config.js +1 -1
- package/dist/doctor/cli-command.js +9 -5
- package/dist/doctor/render.js +0 -1
- package/dist/doctor/report.js +53 -11
- package/dist/gui/server/ask-user-bridge.d.ts +19 -0
- package/dist/gui/server/ask-user-bridge.js +55 -0
- package/dist/gui/server/automation-heartbeat.d.ts +25 -0
- package/dist/gui/server/automation-heartbeat.js +61 -0
- package/dist/gui/server/background-quotes.d.ts +39 -0
- package/dist/gui/server/background-quotes.js +71 -0
- package/dist/gui/server/chat-event-adapter.d.ts +16 -0
- package/dist/gui/server/chat-event-adapter.js +388 -0
- package/dist/gui/server/gui-session-manager.d.ts +2 -0
- package/dist/gui/server/gui-session-manager.js +4 -0
- package/dist/gui/server/history-snapshot-store.d.ts +8 -0
- package/dist/gui/server/history-snapshot-store.js +43 -0
- package/dist/gui/server/http-routes.d.ts +71 -0
- package/dist/gui/server/http-routes.js +1033 -0
- package/dist/gui/server/invoke-tool.d.ts +47 -0
- package/dist/gui/server/invoke-tool.js +373 -0
- package/dist/gui/server/live-chat-event-adapter.d.ts +21 -0
- package/dist/gui/server/live-chat-event-adapter.js +224 -0
- package/dist/gui/server/local-session-coordinator.d.ts +26 -0
- package/dist/gui/server/local-session-coordinator.js +53 -0
- package/dist/gui/server/market-indices-api.d.ts +21 -0
- package/dist/gui/server/market-indices-api.js +26 -0
- package/dist/gui/server/market-indices-snapshot-store.d.ts +12 -0
- package/dist/gui/server/market-indices-snapshot-store.js +56 -0
- package/dist/gui/server/market-state-api.d.ts +250 -0
- package/dist/gui/server/market-state-api.js +597 -0
- package/dist/gui/server/model-setup.d.ts +55 -0
- package/dist/gui/server/model-setup.js +154 -0
- package/dist/gui/server/private-api-access.d.ts +6 -0
- package/dist/gui/server/private-api-access.js +53 -0
- package/dist/gui/server/projector.d.ts +49 -0
- package/dist/gui/server/projector.js +296 -0
- package/dist/gui/server/prompt-observation.d.ts +8 -0
- package/dist/gui/server/prompt-observation.js +43 -0
- package/dist/gui/server/quote-snapshot-store.d.ts +14 -0
- package/dist/gui/server/quote-snapshot-store.js +49 -0
- package/dist/gui/server/server.d.ts +1 -0
- package/dist/gui/server/server.js +262 -0
- package/dist/gui/server/session-actions.d.ts +60 -0
- package/dist/gui/server/session-actions.js +218 -0
- package/dist/gui/server/session-entry-wait.d.ts +27 -0
- package/dist/gui/server/session-entry-wait.js +129 -0
- package/dist/gui/server/session-list.d.ts +2 -0
- package/dist/gui/server/session-list.js +11 -0
- package/dist/gui/server/shutdown.d.ts +10 -0
- package/dist/gui/server/shutdown.js +29 -0
- package/dist/gui/server/tool-invoke-ack.d.ts +17 -0
- package/dist/gui/server/tool-invoke-ack.js +26 -0
- package/dist/gui/server/tool-metadata.d.ts +93 -0
- package/dist/gui/server/tool-metadata.js +148 -0
- package/dist/gui/server/websocket.d.ts +9 -0
- package/dist/gui/server/websocket.js +124 -0
- package/dist/gui/server/writer-lock.d.ts +1 -0
- package/dist/gui/server/writer-lock.js +1 -0
- package/dist/gui/server/ws-hub.d.ts +50 -0
- package/dist/gui/server/ws-hub.js +284 -0
- package/dist/gui/shared/chat-events.d.ts +174 -0
- package/dist/gui/shared/chat-events.js +13 -0
- package/dist/gui/shared/event-reducer.d.ts +3 -0
- package/dist/gui/shared/event-reducer.js +187 -0
- package/dist/index.js +0 -1
- package/dist/infra/cache.d.ts +4 -0
- package/dist/infra/cache.js +4 -1
- package/dist/infra/freshness.js +0 -1
- package/dist/infra/http-client.js +1 -2
- package/dist/infra/index.js +0 -1
- package/dist/infra/lse-byte-budget.d.ts +10 -0
- package/dist/infra/lse-byte-budget.js +47 -0
- package/dist/infra/market-calendar.js +0 -1
- package/dist/infra/native-dependencies.js +0 -1
- package/dist/infra/node-version.js +0 -1
- package/dist/infra/open-url.js +0 -1
- package/dist/infra/opencandle-paths.js +0 -1
- package/dist/infra/rate-limiter.js +1 -1
- package/dist/market-state/alert-conditions.js +0 -1
- package/dist/market-state/alert-runner.d.ts +1 -0
- package/dist/market-state/alert-runner.js +5 -4
- package/dist/market-state/daily-report.js +0 -1
- package/dist/market-state/local-automation-service.js +0 -1
- package/dist/market-state/notification-delivery.js +0 -1
- package/dist/market-state/resolve-for-mutation.js +0 -1
- package/dist/market-state/resolve.js +0 -1
- package/dist/market-state/service.d.ts +26 -21
- package/dist/market-state/service.js +175 -36
- package/dist/market-state/summaries.js +1 -13
- package/dist/memory/index.js +0 -1
- package/dist/memory/manager.js +0 -1
- package/dist/memory/preference-extractor.js +0 -1
- package/dist/memory/retrieval.js +0 -1
- package/dist/memory/sqlite.js +60 -11
- package/dist/memory/storage.js +0 -1
- package/dist/memory/tool-defaults.js +0 -1
- package/dist/memory/types.js +0 -1
- package/dist/monitor.js +0 -1
- package/dist/onboarding/connect.js +0 -1
- package/dist/onboarding/credential-interceptor.js +0 -1
- package/dist/onboarding/degradation-accumulator.js +0 -1
- package/dist/onboarding/prompt-user.d.ts +1 -1
- package/dist/onboarding/prompt-user.js +0 -1
- package/dist/onboarding/provider-status.js +0 -1
- package/dist/onboarding/providers.d.ts +16 -1
- package/dist/onboarding/providers.js +20 -1
- package/dist/onboarding/state.js +0 -1
- package/dist/onboarding/tool-helpers.js +0 -1
- package/dist/onboarding/tool-tags.js +0 -1
- package/dist/onboarding/validate-model-key.d.ts +17 -0
- package/dist/onboarding/validate-model-key.js +86 -0
- package/dist/onboarding/validation.js +8 -1
- package/dist/pi/opencandle-extension.d.ts +2 -1
- package/dist/pi/opencandle-extension.js +4 -4
- package/dist/pi/session-action-dedupe.js +0 -1
- package/dist/pi/session-storage.js +0 -1
- package/dist/pi/session-writer-lock.js +0 -1
- package/dist/pi/session.d.ts +2 -3
- package/dist/pi/session.js +7 -6
- package/dist/pi/setup.d.ts +4 -2
- package/dist/pi/setup.js +60 -61
- package/dist/pi/tool-adapter.js +0 -1
- package/dist/pi/tui-session-coordinator.js +0 -1
- package/dist/prompts/context-builder.js +1 -2
- package/dist/prompts/disclaimer.js +0 -1
- package/dist/prompts/policy-cards.js +0 -1
- package/dist/prompts/sections.js +0 -1
- package/dist/prompts/symbol-preflight.js +0 -1
- package/dist/prompts/workflow-prompts.js +16 -15
- package/dist/providers/alpha-vantage.js +2 -3
- package/dist/providers/coingecko.js +0 -1
- package/dist/providers/errors.js +0 -1
- package/dist/providers/exa-search.js +11 -10
- package/dist/providers/external-tool-command.js +0 -1
- package/dist/providers/external-tool-error.js +0 -1
- package/dist/providers/fear-greed.js +0 -1
- package/dist/providers/finnhub.js +0 -1
- package/dist/providers/fred.js +0 -1
- package/dist/providers/index.d.ts +1 -0
- package/dist/providers/index.js +1 -1
- package/dist/providers/lse.d.ts +35 -0
- package/dist/providers/lse.js +284 -0
- package/dist/providers/polymarket.js +22 -6
- package/dist/providers/provider-credential-error.js +0 -1
- package/dist/providers/reddit-cli.js +0 -1
- package/dist/providers/reddit.js +0 -1
- package/dist/providers/sec-edgar.js +0 -1
- package/dist/providers/tradingview.js +1 -2
- package/dist/providers/twitter-cli.js +0 -1
- package/dist/providers/twitter.js +0 -1
- package/dist/providers/web-search.js +15 -12
- package/dist/providers/with-fallback.js +0 -1
- package/dist/providers/wrap-provider.js +1 -1
- package/dist/providers/yahoo-finance.js +68 -4
- package/dist/routing/classify-intent.js +0 -1
- package/dist/routing/defaults.js +0 -1
- package/dist/routing/entity-extractor.js +2 -3
- package/dist/routing/fund-symbols.js +0 -1
- package/dist/routing/horizon.js +0 -1
- package/dist/routing/index.js +0 -1
- package/dist/routing/legacy-rule-router.js +0 -1
- package/dist/routing/planning.js +0 -1
- package/dist/routing/route-manifest.js +1 -1
- package/dist/routing/router-llm-client.d.ts +2 -2
- package/dist/routing/router-llm-client.js +0 -1
- package/dist/routing/router-prompt.js +0 -1
- package/dist/routing/router-types.js +0 -1
- package/dist/routing/router.js +9 -3
- package/dist/routing/slot-resolver.js +0 -1
- package/dist/routing/symbol-disambiguator.js +0 -1
- package/dist/routing/turn-context.js +0 -1
- package/dist/routing/types.js +0 -1
- package/dist/runtime/answer-contracts.js +0 -1
- package/dist/runtime/artifact-contracts.js +0 -1
- package/dist/runtime/evidence.d.ts +1 -0
- package/dist/runtime/evidence.js +1 -2
- package/dist/runtime/numeric-claims.js +0 -1
- package/dist/runtime/planning-evidence.js +0 -1
- package/dist/runtime/prompt-step.js +0 -1
- package/dist/runtime/provider-tracker.js +0 -1
- package/dist/runtime/run-context.js +0 -1
- package/dist/runtime/session-coordinator.d.ts +2 -2
- package/dist/runtime/session-coordinator.js +2 -3
- package/dist/runtime/session-title.js +0 -1
- package/dist/runtime/tool-defaults-wrapper.js +0 -1
- package/dist/runtime/validation.js +0 -1
- package/dist/runtime/workflow-events.js +0 -1
- package/dist/runtime/workflow-runner.d.ts +1 -0
- package/dist/runtime/workflow-runner.js +8 -3
- package/dist/runtime/workflow-types.js +0 -1
- package/dist/sentiment/adapters/finnhub.js +0 -1
- package/dist/sentiment/adapters/reddit.js +0 -1
- package/dist/sentiment/adapters/twitter.js +0 -1
- package/dist/sentiment/adapters/web.js +0 -1
- package/dist/sentiment/index.js +4 -2
- package/dist/sentiment/insights.js +0 -1
- package/dist/sentiment/keywords.js +0 -1
- package/dist/sentiment/pipeline.js +0 -1
- package/dist/sentiment/scorer.js +0 -1
- package/dist/sentiment/store.js +0 -1
- package/dist/sentiment/trends.js +0 -1
- package/dist/sentiment/types.js +0 -1
- package/dist/system-prompt.js +0 -1
- package/dist/tool-kit.js +0 -1
- package/dist/tools/fundamentals/company-overview.d.ts +1 -1
- package/dist/tools/fundamentals/company-overview.js +2 -1
- package/dist/tools/fundamentals/comps.js +6 -4
- package/dist/tools/fundamentals/dcf.js +37 -9
- package/dist/tools/fundamentals/earnings.d.ts +1 -1
- package/dist/tools/fundamentals/earnings.js +2 -1
- package/dist/tools/fundamentals/financials.js +88 -9
- package/dist/tools/fundamentals/sec-filings.js +0 -1
- package/dist/tools/index.d.ts +121 -2
- package/dist/tools/index.js +3 -1
- package/dist/tools/interaction/ask-user.js +11 -1
- package/dist/tools/macro/event-probabilities.js +0 -1
- package/dist/tools/macro/fear-greed.d.ts +1 -1
- package/dist/tools/macro/fear-greed.js +0 -1
- package/dist/tools/macro/fred-data.d.ts +1 -1
- package/dist/tools/macro/fred-data.js +2 -1
- package/dist/tools/market/crypto-history.js +0 -1
- package/dist/tools/market/crypto-price.d.ts +2 -2
- package/dist/tools/market/crypto-price.js +0 -1
- package/dist/tools/market/price-comparison.d.ts +30 -0
- package/dist/tools/market/price-comparison.js +202 -0
- package/dist/tools/market/screen-stocks.js +0 -1
- package/dist/tools/market/search-ticker.js +1 -2
- package/dist/tools/market/stock-history.d.ts +18 -3
- package/dist/tools/market/stock-history.js +132 -18
- package/dist/tools/market/stock-quote.d.ts +2 -2
- package/dist/tools/market/stock-quote.js +0 -1
- package/dist/tools/options/greeks.js +0 -1
- package/dist/tools/options/option-chain.d.ts +2 -2
- package/dist/tools/options/option-chain.js +0 -1
- package/dist/tools/portfolio/alerts.d.ts +2 -1
- package/dist/tools/portfolio/alerts.js +228 -2
- package/dist/tools/portfolio/correlation.d.ts +1 -1
- package/dist/tools/portfolio/correlation.js +23 -5
- package/dist/tools/portfolio/daily-report.js +0 -1
- package/dist/tools/portfolio/holdings-overlap.js +0 -1
- package/dist/tools/portfolio/notifications.js +0 -1
- package/dist/tools/portfolio/risk-analysis.d.ts +2 -2
- package/dist/tools/portfolio/risk-analysis.js +0 -1
- package/dist/tools/portfolio/tracker.d.ts +3 -1
- package/dist/tools/portfolio/tracker.js +57 -10
- package/dist/tools/portfolio/watchlist.d.ts +3 -6
- package/dist/tools/portfolio/watchlist.js +101 -110
- package/dist/tools/sentiment/insight-format.js +0 -1
- package/dist/tools/sentiment/query-match.js +0 -1
- package/dist/tools/sentiment/reddit-sentiment.js +0 -1
- package/dist/tools/sentiment/sentiment-summary.js +8 -4
- package/dist/tools/sentiment/sentiment-trend.d.ts +5 -1
- package/dist/tools/sentiment/sentiment-trend.js +6 -2
- package/dist/tools/sentiment/twitter-sentiment.js +0 -1
- package/dist/tools/sentiment/untrusted-text.js +0 -1
- package/dist/tools/sentiment/web-search.d.ts +1 -1
- package/dist/tools/sentiment/web-search.js +0 -1
- package/dist/tools/sentiment/web-sentiment.js +0 -1
- package/dist/tools/technical/backtest.js +0 -1
- package/dist/tools/technical/indicators.js +0 -1
- package/dist/types/fundamentals.js +0 -1
- package/dist/types/index.js +0 -1
- package/dist/types/macro.js +0 -1
- package/dist/types/market.d.ts +8 -0
- package/dist/types/market.js +0 -1
- package/dist/types/options.js +0 -1
- package/dist/types/portfolio.js +0 -1
- package/dist/types/prediction-markets.js +0 -1
- package/dist/types/sentiment.js +0 -1
- package/dist/workflows/compare-assets.js +0 -1
- package/dist/workflows/index.js +0 -1
- package/dist/workflows/options-screener.js +0 -1
- package/dist/workflows/portfolio-builder.js +0 -1
- package/gui/web/dist/assets/CatalogOverlay-Cy8Fq0fn.js +1 -0
- package/gui/web/dist/assets/allocation-donut-DgBRIKCk.js +52 -0
- package/gui/web/dist/assets/index-DIlFyIOO.js +66 -0
- package/gui/web/dist/assets/index-DS4jESOB.css +2 -0
- package/gui/web/dist/assets/market-chart-DammaCjH.js +1 -0
- package/gui/web/dist/assets/utils-CnADgYgh.js +1 -0
- package/gui/web/dist/index.html +3 -2
- package/package.json +23 -26
- package/dist/analysts/contracts.js.map +0 -1
- package/dist/analysts/orchestrator.js.map +0 -1
- package/dist/cli-main.js.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/doctor/cli-command.js.map +0 -1
- package/dist/doctor/render.js.map +0 -1
- package/dist/doctor/report.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/infra/cache.js.map +0 -1
- package/dist/infra/freshness.js.map +0 -1
- package/dist/infra/http-client.js.map +0 -1
- package/dist/infra/index.js.map +0 -1
- package/dist/infra/market-calendar.js.map +0 -1
- package/dist/infra/native-dependencies.js.map +0 -1
- package/dist/infra/node-version.js.map +0 -1
- package/dist/infra/open-url.js.map +0 -1
- package/dist/infra/opencandle-paths.js.map +0 -1
- package/dist/infra/rate-limiter.js.map +0 -1
- package/dist/market-state/alert-conditions.js.map +0 -1
- package/dist/market-state/alert-runner.js.map +0 -1
- package/dist/market-state/daily-report.js.map +0 -1
- package/dist/market-state/local-automation-service.js.map +0 -1
- package/dist/market-state/notification-delivery.js.map +0 -1
- package/dist/market-state/resolve-for-mutation.js.map +0 -1
- package/dist/market-state/resolve.js.map +0 -1
- package/dist/market-state/service.js.map +0 -1
- package/dist/market-state/summaries.js.map +0 -1
- package/dist/memory/index.js.map +0 -1
- package/dist/memory/manager.js.map +0 -1
- package/dist/memory/preference-extractor.js.map +0 -1
- package/dist/memory/retrieval.js.map +0 -1
- package/dist/memory/sqlite.js.map +0 -1
- package/dist/memory/storage.js.map +0 -1
- package/dist/memory/tool-defaults.js.map +0 -1
- package/dist/memory/types.js.map +0 -1
- package/dist/monitor.js.map +0 -1
- package/dist/onboarding/connect.js.map +0 -1
- package/dist/onboarding/credential-interceptor.js.map +0 -1
- package/dist/onboarding/degradation-accumulator.js.map +0 -1
- package/dist/onboarding/prompt-user.js.map +0 -1
- package/dist/onboarding/provider-status.js.map +0 -1
- package/dist/onboarding/providers.js.map +0 -1
- package/dist/onboarding/state.js.map +0 -1
- package/dist/onboarding/tool-helpers.js.map +0 -1
- package/dist/onboarding/tool-tags.js.map +0 -1
- package/dist/onboarding/validation.js.map +0 -1
- package/dist/pi/opencandle-extension.js.map +0 -1
- package/dist/pi/session-action-dedupe.js.map +0 -1
- package/dist/pi/session-storage.js.map +0 -1
- package/dist/pi/session-writer-lock.js.map +0 -1
- package/dist/pi/session.js.map +0 -1
- package/dist/pi/setup.js.map +0 -1
- package/dist/pi/tool-adapter.js.map +0 -1
- package/dist/pi/tui-session-coordinator.js.map +0 -1
- package/dist/prompts/context-builder.js.map +0 -1
- package/dist/prompts/disclaimer.js.map +0 -1
- package/dist/prompts/policy-cards.js.map +0 -1
- package/dist/prompts/sections.js.map +0 -1
- package/dist/prompts/symbol-preflight.js.map +0 -1
- package/dist/prompts/workflow-prompts.js.map +0 -1
- package/dist/providers/alpha-vantage.js.map +0 -1
- package/dist/providers/coingecko.js.map +0 -1
- package/dist/providers/errors.js.map +0 -1
- package/dist/providers/exa-search.js.map +0 -1
- package/dist/providers/external-tool-command.js.map +0 -1
- package/dist/providers/external-tool-error.js.map +0 -1
- package/dist/providers/fear-greed.js.map +0 -1
- package/dist/providers/finnhub.js.map +0 -1
- package/dist/providers/fred.js.map +0 -1
- package/dist/providers/index.js.map +0 -1
- package/dist/providers/polymarket.js.map +0 -1
- package/dist/providers/provider-credential-error.js.map +0 -1
- package/dist/providers/reddit-cli.js.map +0 -1
- package/dist/providers/reddit.js.map +0 -1
- package/dist/providers/sec-edgar.js.map +0 -1
- package/dist/providers/tradingview.js.map +0 -1
- package/dist/providers/twitter-cli.js.map +0 -1
- package/dist/providers/twitter.js.map +0 -1
- package/dist/providers/web-search.js.map +0 -1
- package/dist/providers/with-fallback.js.map +0 -1
- package/dist/providers/wrap-provider.js.map +0 -1
- package/dist/providers/yahoo-finance.js.map +0 -1
- package/dist/routing/classify-intent.js.map +0 -1
- package/dist/routing/defaults.js.map +0 -1
- package/dist/routing/entity-extractor.js.map +0 -1
- package/dist/routing/fund-symbols.js.map +0 -1
- package/dist/routing/horizon.js.map +0 -1
- package/dist/routing/index.js.map +0 -1
- package/dist/routing/legacy-rule-router.js.map +0 -1
- package/dist/routing/planning.js.map +0 -1
- package/dist/routing/route-manifest.js.map +0 -1
- package/dist/routing/router-llm-client.js.map +0 -1
- package/dist/routing/router-prompt.js.map +0 -1
- package/dist/routing/router-types.js.map +0 -1
- package/dist/routing/router.js.map +0 -1
- package/dist/routing/slot-resolver.js.map +0 -1
- package/dist/routing/symbol-disambiguator.js.map +0 -1
- package/dist/routing/turn-context.js.map +0 -1
- package/dist/routing/types.js.map +0 -1
- package/dist/runtime/answer-contracts.js.map +0 -1
- package/dist/runtime/artifact-contracts.js.map +0 -1
- package/dist/runtime/evidence.js.map +0 -1
- package/dist/runtime/numeric-claims.js.map +0 -1
- package/dist/runtime/planning-evidence.js.map +0 -1
- package/dist/runtime/prompt-step.js.map +0 -1
- package/dist/runtime/provider-tracker.js.map +0 -1
- package/dist/runtime/run-context.js.map +0 -1
- package/dist/runtime/session-coordinator.js.map +0 -1
- package/dist/runtime/session-title.js.map +0 -1
- package/dist/runtime/tool-defaults-wrapper.js.map +0 -1
- package/dist/runtime/validation.js.map +0 -1
- package/dist/runtime/workflow-events.js.map +0 -1
- package/dist/runtime/workflow-runner.js.map +0 -1
- package/dist/runtime/workflow-types.js.map +0 -1
- package/dist/sentiment/adapters/finnhub.js.map +0 -1
- package/dist/sentiment/adapters/reddit.js.map +0 -1
- package/dist/sentiment/adapters/twitter.js.map +0 -1
- package/dist/sentiment/adapters/web.js.map +0 -1
- package/dist/sentiment/index.js.map +0 -1
- package/dist/sentiment/insights.js.map +0 -1
- package/dist/sentiment/keywords.js.map +0 -1
- package/dist/sentiment/pipeline.js.map +0 -1
- package/dist/sentiment/scorer.js.map +0 -1
- package/dist/sentiment/store.js.map +0 -1
- package/dist/sentiment/trends.js.map +0 -1
- package/dist/sentiment/types.js.map +0 -1
- package/dist/system-prompt.js.map +0 -1
- package/dist/tool-kit.js.map +0 -1
- package/dist/tools/fundamentals/company-overview.js.map +0 -1
- package/dist/tools/fundamentals/comps.js.map +0 -1
- package/dist/tools/fundamentals/dcf.js.map +0 -1
- package/dist/tools/fundamentals/earnings.js.map +0 -1
- package/dist/tools/fundamentals/financials.js.map +0 -1
- package/dist/tools/fundamentals/sec-filings.js.map +0 -1
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/interaction/ask-user.js.map +0 -1
- package/dist/tools/macro/event-probabilities.js.map +0 -1
- package/dist/tools/macro/fear-greed.js.map +0 -1
- package/dist/tools/macro/fred-data.js.map +0 -1
- package/dist/tools/market/crypto-history.js.map +0 -1
- package/dist/tools/market/crypto-price.js.map +0 -1
- package/dist/tools/market/screen-stocks.js.map +0 -1
- package/dist/tools/market/search-ticker.js.map +0 -1
- package/dist/tools/market/stock-history.js.map +0 -1
- package/dist/tools/market/stock-quote.js.map +0 -1
- package/dist/tools/options/greeks.js.map +0 -1
- package/dist/tools/options/option-chain.js.map +0 -1
- package/dist/tools/portfolio/alerts.js.map +0 -1
- package/dist/tools/portfolio/correlation.js.map +0 -1
- package/dist/tools/portfolio/daily-report.js.map +0 -1
- package/dist/tools/portfolio/holdings-overlap.js.map +0 -1
- package/dist/tools/portfolio/notifications.js.map +0 -1
- package/dist/tools/portfolio/risk-analysis.js.map +0 -1
- package/dist/tools/portfolio/tracker.js.map +0 -1
- package/dist/tools/portfolio/watchlist.js.map +0 -1
- package/dist/tools/sentiment/insight-format.js.map +0 -1
- package/dist/tools/sentiment/query-match.js.map +0 -1
- package/dist/tools/sentiment/reddit-sentiment.js.map +0 -1
- package/dist/tools/sentiment/sentiment-summary.js.map +0 -1
- package/dist/tools/sentiment/sentiment-trend.js.map +0 -1
- package/dist/tools/sentiment/twitter-sentiment.js.map +0 -1
- package/dist/tools/sentiment/untrusted-text.js.map +0 -1
- package/dist/tools/sentiment/web-search.js.map +0 -1
- package/dist/tools/sentiment/web-sentiment.js.map +0 -1
- package/dist/tools/technical/backtest.js.map +0 -1
- package/dist/tools/technical/indicators.js.map +0 -1
- package/dist/types/fundamentals.js.map +0 -1
- package/dist/types/index.js.map +0 -1
- package/dist/types/macro.js.map +0 -1
- package/dist/types/market.js.map +0 -1
- package/dist/types/options.js.map +0 -1
- package/dist/types/portfolio.js.map +0 -1
- package/dist/types/prediction-markets.js.map +0 -1
- package/dist/types/sentiment.js.map +0 -1
- package/dist/workflows/compare-assets.js.map +0 -1
- package/dist/workflows/index.js.map +0 -1
- package/dist/workflows/options-screener.js.map +0 -1
- package/dist/workflows/portfolio-builder.js.map +0 -1
- package/gui/server/ask-user-bridge.ts +0 -89
- package/gui/server/automation-heartbeat.ts +0 -97
- package/gui/server/background-quotes.ts +0 -127
- package/gui/server/chat-event-adapter.ts +0 -294
- package/gui/server/gui-session-manager.ts +0 -5
- package/gui/server/http-routes.ts +0 -1201
- package/gui/server/invoke-tool.ts +0 -490
- package/gui/server/live-chat-event-adapter.ts +0 -243
- package/gui/server/local-session-coordinator.ts +0 -97
- package/gui/server/market-state-api.ts +0 -331
- package/gui/server/model-setup.ts +0 -254
- package/gui/server/package.json +0 -5
- package/gui/server/private-api-access.ts +0 -62
- package/gui/server/projector.ts +0 -392
- package/gui/server/prompt-observation.ts +0 -58
- package/gui/server/quote-snapshot-store.ts +0 -50
- package/gui/server/server.ts +0 -289
- package/gui/server/session-actions.ts +0 -323
- package/gui/server/session-entry-wait.ts +0 -179
- package/gui/server/shutdown.ts +0 -47
- package/gui/server/tool-invoke-ack.ts +0 -49
- package/gui/server/tool-metadata.ts +0 -167
- package/gui/server/websocket.ts +0 -138
- package/gui/server/writer-lock.ts +0 -1
- package/gui/server/ws-hub.ts +0 -403
- package/gui/shared/chat-events.ts +0 -165
- package/gui/shared/event-reducer.ts +0 -220
- package/gui/web/dist/assets/CatalogOverlay-DZ1niyQm.js +0 -1
- package/gui/web/dist/assets/index-D4F9AJnn.css +0 -2
- package/gui/web/dist/assets/index-DtqMMBTr.js +0 -65
- package/src/analysts/contracts.ts +0 -176
- package/src/analysts/orchestrator.ts +0 -244
- package/src/cli-main.ts +0 -510
- package/src/cli.ts +0 -17
- package/src/config.ts +0 -272
- package/src/doctor/cli-command.ts +0 -83
- package/src/doctor/render.ts +0 -37
- package/src/doctor/report.ts +0 -638
- package/src/index.ts +0 -5
- package/src/infra/cache.ts +0 -127
- package/src/infra/freshness.ts +0 -165
- package/src/infra/http-client.ts +0 -134
- package/src/infra/index.ts +0 -14
- package/src/infra/market-calendar.ts +0 -193
- package/src/infra/native-dependencies.ts +0 -84
- package/src/infra/node-version.ts +0 -23
- package/src/infra/open-url.ts +0 -28
- package/src/infra/opencandle-paths.ts +0 -53
- package/src/infra/rate-limiter.ts +0 -77
- package/src/market-state/alert-conditions.ts +0 -82
- package/src/market-state/alert-runner.ts +0 -863
- package/src/market-state/daily-report.ts +0 -237
- package/src/market-state/local-automation-service.ts +0 -162
- package/src/market-state/notification-delivery.ts +0 -158
- package/src/market-state/resolve-for-mutation.ts +0 -24
- package/src/market-state/resolve.ts +0 -112
- package/src/market-state/service.ts +0 -2208
- package/src/market-state/summaries.ts +0 -75
- package/src/memory/index.ts +0 -10
- package/src/memory/manager.ts +0 -190
- package/src/memory/preference-extractor.ts +0 -106
- package/src/memory/retrieval.ts +0 -71
- package/src/memory/sqlite.ts +0 -577
- package/src/memory/storage.ts +0 -195
- package/src/memory/tool-defaults.ts +0 -108
- package/src/memory/types.ts +0 -71
- package/src/monitor.ts +0 -123
- package/src/onboarding/connect.ts +0 -177
- package/src/onboarding/credential-interceptor.ts +0 -122
- package/src/onboarding/degradation-accumulator.ts +0 -77
- package/src/onboarding/prompt-user.ts +0 -85
- package/src/onboarding/provider-status.ts +0 -382
- package/src/onboarding/providers.ts +0 -442
- package/src/onboarding/state.ts +0 -216
- package/src/onboarding/tool-helpers.ts +0 -104
- package/src/onboarding/tool-tags.ts +0 -244
- package/src/onboarding/validation.ts +0 -152
- package/src/pi/opencandle-extension.ts +0 -1294
- package/src/pi/session-action-dedupe.ts +0 -155
- package/src/pi/session-storage.ts +0 -5
- package/src/pi/session-writer-lock.ts +0 -426
- package/src/pi/session.ts +0 -84
- package/src/pi/setup.ts +0 -399
- package/src/pi/tool-adapter.ts +0 -49
- package/src/pi/tui-session-coordinator.ts +0 -351
- package/src/prompts/context-builder.ts +0 -326
- package/src/prompts/disclaimer.ts +0 -9
- package/src/prompts/policy-cards.ts +0 -228
- package/src/prompts/sections.ts +0 -46
- package/src/prompts/symbol-preflight.ts +0 -80
- package/src/prompts/workflow-prompts.ts +0 -504
- package/src/providers/alpha-vantage.ts +0 -340
- package/src/providers/coingecko.ts +0 -95
- package/src/providers/errors.ts +0 -9
- package/src/providers/exa-search.ts +0 -375
- package/src/providers/external-tool-command.ts +0 -164
- package/src/providers/external-tool-error.ts +0 -20
- package/src/providers/fear-greed.ts +0 -45
- package/src/providers/finnhub.ts +0 -125
- package/src/providers/fred.ts +0 -83
- package/src/providers/index.ts +0 -17
- package/src/providers/polymarket.ts +0 -214
- package/src/providers/provider-credential-error.ts +0 -23
- package/src/providers/reddit-cli.ts +0 -286
- package/src/providers/reddit.ts +0 -106
- package/src/providers/sec-edgar.ts +0 -326
- package/src/providers/tradingview.ts +0 -399
- package/src/providers/twitter-cli.ts +0 -202
- package/src/providers/twitter.ts +0 -102
- package/src/providers/web-search.ts +0 -303
- package/src/providers/with-fallback.ts +0 -42
- package/src/providers/wrap-provider.ts +0 -105
- package/src/providers/yahoo-finance.ts +0 -984
- package/src/routing/classify-intent.ts +0 -380
- package/src/routing/defaults.ts +0 -29
- package/src/routing/entity-extractor.ts +0 -557
- package/src/routing/fund-symbols.ts +0 -58
- package/src/routing/horizon.ts +0 -7
- package/src/routing/index.ts +0 -70
- package/src/routing/legacy-rule-router.ts +0 -13
- package/src/routing/planning.ts +0 -829
- package/src/routing/route-manifest.ts +0 -308
- package/src/routing/router-llm-client.ts +0 -64
- package/src/routing/router-prompt.ts +0 -159
- package/src/routing/router-types.ts +0 -84
- package/src/routing/router.ts +0 -1332
- package/src/routing/slot-resolver.ts +0 -213
- package/src/routing/symbol-disambiguator.ts +0 -72
- package/src/routing/turn-context.ts +0 -108
- package/src/routing/types.ts +0 -77
- package/src/runtime/answer-contracts.ts +0 -693
- package/src/runtime/artifact-contracts.ts +0 -77
- package/src/runtime/evidence.ts +0 -78
- package/src/runtime/numeric-claims.ts +0 -108
- package/src/runtime/planning-evidence.ts +0 -597
- package/src/runtime/prompt-step.ts +0 -185
- package/src/runtime/provider-tracker.ts +0 -40
- package/src/runtime/run-context.ts +0 -32
- package/src/runtime/session-coordinator.ts +0 -1037
- package/src/runtime/session-title.ts +0 -60
- package/src/runtime/tool-defaults-wrapper.ts +0 -43
- package/src/runtime/validation.ts +0 -211
- package/src/runtime/workflow-events.ts +0 -77
- package/src/runtime/workflow-runner.ts +0 -182
- package/src/runtime/workflow-types.ts +0 -105
- package/src/sentiment/adapters/finnhub.ts +0 -49
- package/src/sentiment/adapters/reddit.ts +0 -65
- package/src/sentiment/adapters/twitter.ts +0 -36
- package/src/sentiment/adapters/web.ts +0 -44
- package/src/sentiment/index.ts +0 -49
- package/src/sentiment/insights.ts +0 -269
- package/src/sentiment/keywords.ts +0 -31
- package/src/sentiment/pipeline.ts +0 -91
- package/src/sentiment/scorer.ts +0 -89
- package/src/sentiment/store.ts +0 -260
- package/src/sentiment/trends.ts +0 -96
- package/src/sentiment/types.ts +0 -112
- package/src/system-prompt.ts +0 -115
- package/src/tool-kit.ts +0 -69
- package/src/tools/AGENTS.md +0 -36
- package/src/tools/fundamentals/company-overview.ts +0 -64
- package/src/tools/fundamentals/comps.ts +0 -180
- package/src/tools/fundamentals/dcf.ts +0 -447
- package/src/tools/fundamentals/earnings.ts +0 -57
- package/src/tools/fundamentals/financials.ts +0 -63
- package/src/tools/fundamentals/sec-filings.ts +0 -105
- package/src/tools/index.ts +0 -104
- package/src/tools/interaction/ask-user.ts +0 -93
- package/src/tools/macro/event-probabilities.ts +0 -141
- package/src/tools/macro/fear-greed.ts +0 -41
- package/src/tools/macro/fred-data.ts +0 -92
- package/src/tools/market/crypto-history.ts +0 -72
- package/src/tools/market/crypto-price.ts +0 -65
- package/src/tools/market/screen-stocks.ts +0 -290
- package/src/tools/market/search-ticker.ts +0 -254
- package/src/tools/market/stock-history.ts +0 -104
- package/src/tools/market/stock-quote.ts +0 -73
- package/src/tools/options/greeks.ts +0 -81
- package/src/tools/options/option-chain.ts +0 -134
- package/src/tools/portfolio/alerts.ts +0 -457
- package/src/tools/portfolio/correlation.ts +0 -189
- package/src/tools/portfolio/daily-report.ts +0 -107
- package/src/tools/portfolio/holdings-overlap.ts +0 -139
- package/src/tools/portfolio/notifications.ts +0 -45
- package/src/tools/portfolio/risk-analysis.ts +0 -173
- package/src/tools/portfolio/tracker.ts +0 -308
- package/src/tools/portfolio/watchlist.ts +0 -288
- package/src/tools/sentiment/insight-format.ts +0 -50
- package/src/tools/sentiment/query-match.ts +0 -117
- package/src/tools/sentiment/reddit-sentiment.ts +0 -403
- package/src/tools/sentiment/sentiment-summary.ts +0 -383
- package/src/tools/sentiment/sentiment-trend.ts +0 -75
- package/src/tools/sentiment/twitter-sentiment.ts +0 -287
- package/src/tools/sentiment/untrusted-text.ts +0 -21
- package/src/tools/sentiment/web-search.ts +0 -186
- package/src/tools/sentiment/web-sentiment.ts +0 -96
- package/src/tools/technical/backtest.ts +0 -336
- package/src/tools/technical/indicators.ts +0 -281
- package/src/types/fundamentals.ts +0 -47
- package/src/types/index.ts +0 -26
- package/src/types/macro.ts +0 -27
- package/src/types/market.ts +0 -46
- package/src/types/options.ts +0 -53
- package/src/types/portfolio.ts +0 -83
- package/src/types/prediction-markets.ts +0 -13
- package/src/types/sentiment.ts +0 -129
- package/src/workflows/compare-assets.ts +0 -89
- package/src/workflows/index.ts +0 -3
- package/src/workflows/options-screener.ts +0 -125
- package/src/workflows/portfolio-builder.ts +0 -63
package/dist/pi/setup.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { LoginDialogComponent, } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { validateModelKey } from "../onboarding/validate-model-key.js";
|
|
2
3
|
/**
|
|
3
4
|
* Registry of "fast default" models for each LLM auth provider. After a fresh
|
|
4
5
|
* sign-in we try to activate the default without opening a picker, falling back
|
|
@@ -82,8 +83,8 @@ async function selectProviderForLogin(ctx) {
|
|
|
82
83
|
return undefined;
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
|
-
async function selectAdvancedOAuthProvider(ctx) {
|
|
86
|
-
const providers =
|
|
86
|
+
async function selectAdvancedOAuthProvider(ctx, modelRuntime) {
|
|
87
|
+
const providers = modelRuntime.getProviders().filter((provider) => provider.auth.oauth?.login);
|
|
87
88
|
if (providers.length === 0) {
|
|
88
89
|
ctx.ui.notify("No sign-in providers are available.", "warning");
|
|
89
90
|
return undefined;
|
|
@@ -92,12 +93,9 @@ async function selectAdvancedOAuthProvider(ctx) {
|
|
|
92
93
|
const choice = await ctx.ui.select("Choose a provider", labels);
|
|
93
94
|
return providers.find((provider) => provider.name === choice)?.id;
|
|
94
95
|
}
|
|
95
|
-
async function runLoginDialog(ctx, providerId) {
|
|
96
|
-
const provider =
|
|
97
|
-
.getOAuthProviders()
|
|
98
|
-
.find((item) => item.id === providerId);
|
|
96
|
+
async function runLoginDialog(ctx, providerId, modelRuntime) {
|
|
97
|
+
const provider = modelRuntime.getProvider(providerId);
|
|
99
98
|
const providerName = provider?.name ?? providerId;
|
|
100
|
-
const usesCallbackServer = provider?.usesCallbackServer ?? false;
|
|
101
99
|
const success = await ctx.ui.custom((tui, _theme, _keybindings, done) => {
|
|
102
100
|
let finished = false;
|
|
103
101
|
const finish = (value) => {
|
|
@@ -109,52 +107,34 @@ async function runLoginDialog(ctx, providerId) {
|
|
|
109
107
|
const dialog = new LoginDialogComponent(tui, providerId, (completed) => {
|
|
110
108
|
finish(completed);
|
|
111
109
|
});
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
manualCodeResolve = resolve;
|
|
116
|
-
manualCodeReject = reject;
|
|
117
|
-
});
|
|
118
|
-
// Cast required: advanced providers return dynamic IDs outside the SDK's static union type
|
|
119
|
-
void ctx.modelRegistry.authStorage
|
|
120
|
-
.login(providerId, {
|
|
121
|
-
onAuth: (info) => {
|
|
122
|
-
dialog.showAuth(info.url, info.instructions);
|
|
123
|
-
if (usesCallbackServer) {
|
|
124
|
-
void dialog
|
|
125
|
-
.showManualInput("Paste redirect URL below, or complete login in your browser:")
|
|
126
|
-
.then((value) => {
|
|
127
|
-
if (value && manualCodeResolve) {
|
|
128
|
-
manualCodeResolve(value);
|
|
129
|
-
manualCodeResolve = undefined;
|
|
130
|
-
}
|
|
131
|
-
})
|
|
132
|
-
.catch(() => {
|
|
133
|
-
if (manualCodeReject) {
|
|
134
|
-
manualCodeReject(new Error("Login cancelled"));
|
|
135
|
-
manualCodeReject = undefined;
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
else if (providerId === "github-copilot") {
|
|
140
|
-
dialog.showWaiting("Waiting for browser authentication...");
|
|
141
|
-
}
|
|
142
|
-
},
|
|
143
|
-
onDeviceCode: (info) => {
|
|
144
|
-
dialog.showDeviceCode(info);
|
|
145
|
-
dialog.showWaiting("Waiting for authentication...");
|
|
146
|
-
},
|
|
147
|
-
onPrompt: async (prompt) => dialog.showPrompt(prompt.message, prompt.placeholder),
|
|
148
|
-
onProgress: (message) => dialog.showProgress(message),
|
|
149
|
-
onSelect: async (prompt) => {
|
|
150
|
-
const options = prompt.options
|
|
110
|
+
const prompt = async (request) => {
|
|
111
|
+
if (request.type === "select") {
|
|
112
|
+
const options = request.options
|
|
151
113
|
.map((option, index) => `${index + 1}. ${option.label}`)
|
|
152
114
|
.join("\n");
|
|
153
|
-
const answer = await dialog.showPrompt(`${
|
|
115
|
+
const answer = await dialog.showPrompt(`${request.message}\n\n${options}`, "Enter a number");
|
|
154
116
|
const selectedIndex = Number.parseInt(answer.trim(), 10) - 1;
|
|
155
|
-
return
|
|
156
|
-
}
|
|
157
|
-
|
|
117
|
+
return request.options[selectedIndex]?.id ?? "";
|
|
118
|
+
}
|
|
119
|
+
return dialog.showPrompt(request.message, request.placeholder);
|
|
120
|
+
};
|
|
121
|
+
const notify = (event) => {
|
|
122
|
+
if (event.type === "auth_url")
|
|
123
|
+
dialog.showAuth(event.url, event.instructions);
|
|
124
|
+
else if (event.type === "device_code") {
|
|
125
|
+
dialog.showDeviceCode({
|
|
126
|
+
userCode: event.userCode,
|
|
127
|
+
verificationUri: event.verificationUri,
|
|
128
|
+
});
|
|
129
|
+
dialog.showWaiting("Waiting for authentication...");
|
|
130
|
+
}
|
|
131
|
+
else if (event.type === "progress" || event.type === "info")
|
|
132
|
+
dialog.showProgress(event.message);
|
|
133
|
+
};
|
|
134
|
+
void modelRuntime
|
|
135
|
+
.login(providerId, "oauth", {
|
|
136
|
+
prompt,
|
|
137
|
+
notify,
|
|
158
138
|
signal: dialog.signal,
|
|
159
139
|
})
|
|
160
140
|
.then(() => finish(true))
|
|
@@ -174,7 +154,7 @@ async function runLoginDialog(ctx, providerId) {
|
|
|
174
154
|
}
|
|
175
155
|
return false;
|
|
176
156
|
}
|
|
177
|
-
async function runApiKeySetup(ctx, provider) {
|
|
157
|
+
export async function runApiKeySetup(ctx, provider, modelRuntime) {
|
|
178
158
|
const label = API_KEY_PROVIDER_LABELS[provider];
|
|
179
159
|
ctx.ui.notify(`OpenCandle stores your ${label} API key locally. After saving it, OpenCandle will select a fast default model when one is available.`, "info");
|
|
180
160
|
const key = await ctx.ui.input(`Paste your ${label} API key`, "API key");
|
|
@@ -183,9 +163,19 @@ async function runApiKeySetup(ctx, provider) {
|
|
|
183
163
|
ctx.ui.notify("No API key entered.", "warning");
|
|
184
164
|
return false;
|
|
185
165
|
}
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
166
|
+
const validation = await validateModelKey(provider, trimmed);
|
|
167
|
+
if (validation.status === "invalid") {
|
|
168
|
+
ctx.ui.notify(`Key was rejected by ${validation.providerLabel}. Paste a different key.`, "error");
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
await modelRuntime.login(provider, "api_key", {
|
|
172
|
+
prompt: async () => trimmed,
|
|
173
|
+
notify: () => { },
|
|
174
|
+
});
|
|
175
|
+
await ctx.modelRegistry.refresh();
|
|
176
|
+
ctx.ui.notify(validation.status === "transient"
|
|
177
|
+
? `Saved — couldn't verify (network issue). ${label} API key saved to OpenCandle.`
|
|
178
|
+
: `${label} API key saved to OpenCandle.`, "info");
|
|
189
179
|
return true;
|
|
190
180
|
}
|
|
191
181
|
/**
|
|
@@ -236,7 +226,7 @@ async function selectModel(api, ctx, preferredProvider) {
|
|
|
236
226
|
ctx.ui.notify(`Model selected: ${model.provider}/${model.id}`, "info");
|
|
237
227
|
return true;
|
|
238
228
|
}
|
|
239
|
-
async function runLlmSetup(api, ctx, mode) {
|
|
229
|
+
async function runLlmSetup(api, ctx, mode, modelRuntime) {
|
|
240
230
|
while (true) {
|
|
241
231
|
const requirement = getLlmSetupRequirement(ctx);
|
|
242
232
|
if (requirement === "ready") {
|
|
@@ -268,15 +258,21 @@ async function runLlmSetup(api, ctx, mode) {
|
|
|
268
258
|
return "cancelled";
|
|
269
259
|
}
|
|
270
260
|
if (choice === "Sign in with browser") {
|
|
261
|
+
if (!modelRuntime) {
|
|
262
|
+
ctx.ui.notify("Model authentication is unavailable in this session.", "error");
|
|
263
|
+
return "cancelled";
|
|
264
|
+
}
|
|
271
265
|
const providerChoice = await selectProviderForLogin(ctx);
|
|
272
266
|
if (!providerChoice) {
|
|
273
267
|
continue;
|
|
274
268
|
}
|
|
275
|
-
const providerId = providerChoice === "advanced"
|
|
269
|
+
const providerId = providerChoice === "advanced"
|
|
270
|
+
? await selectAdvancedOAuthProvider(ctx, modelRuntime)
|
|
271
|
+
: providerChoice;
|
|
276
272
|
if (!providerId) {
|
|
277
273
|
continue;
|
|
278
274
|
}
|
|
279
|
-
const loggedIn = await runLoginDialog(ctx, providerId);
|
|
275
|
+
const loggedIn = await runLoginDialog(ctx, providerId, modelRuntime);
|
|
280
276
|
if (!loggedIn) {
|
|
281
277
|
continue;
|
|
282
278
|
}
|
|
@@ -295,7 +291,11 @@ async function runLlmSetup(api, ctx, mode) {
|
|
|
295
291
|
if (!provider) {
|
|
296
292
|
continue;
|
|
297
293
|
}
|
|
298
|
-
|
|
294
|
+
if (!modelRuntime) {
|
|
295
|
+
ctx.ui.notify("Model authentication is unavailable in this session.", "error");
|
|
296
|
+
return "cancelled";
|
|
297
|
+
}
|
|
298
|
+
const saved = await runApiKeySetup(ctx, provider, modelRuntime);
|
|
299
299
|
if (!saved) {
|
|
300
300
|
continue;
|
|
301
301
|
}
|
|
@@ -309,11 +309,10 @@ async function runLlmSetup(api, ctx, mode) {
|
|
|
309
309
|
}
|
|
310
310
|
}
|
|
311
311
|
}
|
|
312
|
-
export async function runOpenCandleSetup(api, ctx, options = { mode: "startup" }) {
|
|
312
|
+
export async function runOpenCandleSetup(api, ctx, options = { mode: "startup" }, modelRuntime) {
|
|
313
313
|
const initialRequirement = getLlmSetupRequirement(ctx);
|
|
314
314
|
if (initialRequirement !== "ready" || options.mode === "manual") {
|
|
315
|
-
return runLlmSetup(api, ctx, options.mode);
|
|
315
|
+
return runLlmSetup(api, ctx, options.mode, modelRuntime);
|
|
316
316
|
}
|
|
317
317
|
return "ready";
|
|
318
318
|
}
|
|
319
|
-
//# sourceMappingURL=setup.js.map
|
package/dist/pi/tool-adapter.js
CHANGED
|
@@ -33,7 +33,7 @@ export class PromptContextBuilder {
|
|
|
33
33
|
let truncationMarkers = 0;
|
|
34
34
|
for (const name of SECTION_ORDER) {
|
|
35
35
|
const section = this.sections.get(name);
|
|
36
|
-
if (!section
|
|
36
|
+
if (!section?.content)
|
|
37
37
|
continue;
|
|
38
38
|
const truncated = truncateTobudget(section.content, section.characterBudget);
|
|
39
39
|
const wasTruncated = truncated.includes("[...truncated]");
|
|
@@ -258,4 +258,3 @@ Every committal response MUST carry four elements:
|
|
|
258
258
|
|
|
259
259
|
## Assumption Disclosure
|
|
260
260
|
Structured workflow prompts may include a pre-rendered "Assumptions" block with correct source attribution (user-specified, saved preference, or default). Start with that block only when the workflow instructions explicitly say to. Fallback prompts include "Assumptions Context" only for internal routing context; do not reproduce that context unless the user explicitly asks for assumptions. Do NOT independently relabel any value's source anywhere in your response. When an assumptions block is shown, it is the single authoritative provenance representation.`;
|
|
261
|
-
//# sourceMappingURL=context-builder.js.map
|
|
@@ -6,4 +6,3 @@
|
|
|
6
6
|
export const DISCLAIMER_TEXT = "OpenCandle is a research and analysis tool, not financial advice or a fiduciary financial advisor. " +
|
|
7
7
|
"Views, targets, and allocations are informational analyst output — not personalized recommendations. " +
|
|
8
8
|
"Verify independently before acting.";
|
|
9
|
-
//# sourceMappingURL=disclaimer.js.map
|
package/dist/prompts/sections.js
CHANGED
|
@@ -322,11 +322,12 @@ export function buildCompareAssetsPrompt(resolution) {
|
|
|
322
322
|
const isOverlapComparison = resolution.resolved.metrics?.includes("overlap") ?? false;
|
|
323
323
|
const hasFundContext = isFundOrIndexAssetScope(resolution.resolved.assetScope) || areLikelyFundOrIndexSymbols(symbols);
|
|
324
324
|
const shouldProbeFundOverlap = !isOverlapComparison && isLongInvestmentHorizon(timeHorizon) && hasFundContext;
|
|
325
|
+
const technicalEndStep = shouldProbeFundOverlap ? 7 : 6;
|
|
325
326
|
const sentimentStep = includeSentiment
|
|
326
|
-
? `\
|
|
327
|
+
? `\n${technicalEndStep + 1}. Use get_sentiment_summary for each of: ${symbolList} to compare retail/news sentiment and note source availability.`
|
|
327
328
|
: "";
|
|
328
329
|
const interestRateStep = isInterestRateSensitive
|
|
329
|
-
? `\n${includeSentiment ?
|
|
330
|
+
? `\n${technicalEndStep + (includeSentiment ? 2 : 1)}. Use get_economic_data for the current Fed funds backdrop. Treat this as historical/current context unless you also have explicit futures or forecast evidence.`
|
|
330
331
|
: "";
|
|
331
332
|
const sentimentMetric = includeSentiment ? ", sentiment score/summary" : "";
|
|
332
333
|
const interestRateGuidance = isInterestRateSensitive
|
|
@@ -376,23 +377,23 @@ macro hedge decision guidance:
|
|
|
376
377
|
: `- Present a comparison table with key metrics: price, P/E, revenue growth, profit margin, RSI, Sharpe, max drawdown${sentimentMetric}.
|
|
377
378
|
- Highlight which asset is stronger on each metric.`;
|
|
378
379
|
const technicalRiskSteps = isOverlapComparison
|
|
379
|
-
? `
|
|
380
|
-
|
|
381
|
-
|
|
380
|
+
? `4. Use analyze_holdings_overlap with symbols [${symbolList}] to fetch provider top holdings and compute pairwise overlap by weight.
|
|
381
|
+
5. Use analyze_correlation across [${symbolList}] only as supporting diversification evidence; do not substitute correlation for holdings overlap.
|
|
382
|
+
6. Skip momentum/risk tool calls unless the user asks about timing or trade setup; the core question is top holdings and sector overlap.`
|
|
382
383
|
: shouldProbeFundOverlap
|
|
383
|
-
? `
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
: `
|
|
388
|
-
|
|
389
|
-
|
|
384
|
+
? `4. Use analyze_holdings_overlap with symbols [${symbolList}] to fetch provider top holdings and compute pairwise overlap by weight.
|
|
385
|
+
5. Use analyze_correlation across [${symbolList}] as supporting diversification evidence.
|
|
386
|
+
6. Use analyze_risk for each to compare long-horizon risk context.
|
|
387
|
+
7. Use get_technical_indicators only as secondary timing context; do not let RSI or short-term momentum dominate the long-horizon fund decision.`
|
|
388
|
+
: `4. Use get_technical_indicators for each to compare momentum and trend.
|
|
389
|
+
5. Use analyze_risk for each to compare risk metrics.
|
|
390
|
+
6. Use analyze_correlation across [${symbolList}] to check diversification.`;
|
|
390
391
|
const horizonLine = timeHorizon ? `\nTime horizon: ${timeHorizon}` : "";
|
|
391
392
|
const budgetLine = budget !== undefined ? `\nBudget: ${formatBudget(budget)}` : "";
|
|
392
393
|
const horizonSteps = timeHorizon
|
|
393
394
|
? `
|
|
394
|
-
|
|
395
|
-
|
|
395
|
+
${technicalEndStep + (includeSentiment ? 1 : 0) + (isInterestRateSensitive ? 1 : 0) + 1}. Adapt the comparison to the ${timeHorizon} horizon: prioritize near-term catalysts, earnings/guidance, estimate revisions, sentiment, and forward-looking valuation evidence over long-term historical averages.
|
|
396
|
+
${technicalEndStep + (includeSentiment ? 1 : 0) + (isInterestRateSensitive ? 1 : 0) + 2}. Use historical risk and technical metrics as context, but explain what they do and do not imply over ${timeHorizon}.`
|
|
396
397
|
: "";
|
|
397
398
|
const horizonResponse = timeHorizon
|
|
398
399
|
? `
|
|
@@ -427,6 +428,7 @@ Compare these assets side by side: ${symbolList}${horizonLine}${budgetLine}
|
|
|
427
428
|
Steps:
|
|
428
429
|
1. Use get_stock_quote for each of: ${symbolList}.
|
|
429
430
|
2. Use compare_companies with symbols [${symbols.map((s) => `"${s}"`).join(", ")}] for peer metrics. If some fundamentals are unavailable, continue the comparison with the available symbols and mark missing metrics as unavailable.
|
|
431
|
+
3. Use get_price_comparison with symbols [${symbolList}] and a range that fits the resolved time horizon; use the default comparison range when no time horizon is resolved so the answer includes an indexed price comparison.
|
|
430
432
|
${technicalRiskSteps}${sentimentStep}${interestRateStep}${horizonSteps}
|
|
431
433
|
${macroHedgeSteps}
|
|
432
434
|
${interestRateGuidance}
|
|
@@ -442,4 +444,3 @@ ${tableInstruction}
|
|
|
442
444
|
${actionPlanResponse}
|
|
443
445
|
- Note any caveats (different sectors, concentration, market cap disparity, unavailable fundamentals, unavailable forward-looking estimates, etc.).${horizonResponse}`;
|
|
444
446
|
}
|
|
445
|
-
//# sourceMappingURL=workflow-prompts.js.map
|
|
@@ -182,7 +182,7 @@ export async function getGlobalQuote(symbol, apiKey) {
|
|
|
182
182
|
const data = await httpGet(url);
|
|
183
183
|
throwIfApiMessage(data);
|
|
184
184
|
const gq = data["Global Quote"];
|
|
185
|
-
if (!gq
|
|
185
|
+
if (!gq?.["05. price"]) {
|
|
186
186
|
throw new Error(`Alpha Vantage: No quote data for ${symbol}`);
|
|
187
187
|
}
|
|
188
188
|
const price = parseFloat(gq["05. price"]) || 0;
|
|
@@ -291,6 +291,5 @@ function parseNullableNum(s) {
|
|
|
291
291
|
if (!s || s === "None" || s === "-")
|
|
292
292
|
return null;
|
|
293
293
|
const n = parseFloat(s);
|
|
294
|
-
return isNaN(n) ? null : n;
|
|
294
|
+
return Number.isNaN(n) ? null : n;
|
|
295
295
|
}
|
|
296
|
-
//# sourceMappingURL=alpha-vantage.js.map
|
package/dist/providers/errors.js
CHANGED
|
@@ -90,14 +90,16 @@ function parseMcpResultBlocks(text) {
|
|
|
90
90
|
return results;
|
|
91
91
|
}
|
|
92
92
|
function mapApiResults(results) {
|
|
93
|
-
return results
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
93
|
+
return results.flatMap((r) => {
|
|
94
|
+
if (!r.url)
|
|
95
|
+
return [];
|
|
96
|
+
return {
|
|
97
|
+
title: r.title ?? "",
|
|
98
|
+
url: r.url,
|
|
99
|
+
published: r.publishedDate ?? null,
|
|
100
|
+
snippet: (r.highlights?.join(" ") || r.text || "").slice(0, SNIPPET_MAX_CHARS),
|
|
101
|
+
};
|
|
102
|
+
});
|
|
101
103
|
}
|
|
102
104
|
// ---------------------------------------------------------------------------
|
|
103
105
|
// Freshness post-filter
|
|
@@ -108,7 +110,7 @@ function filterByFreshness(results, freshness) {
|
|
|
108
110
|
if (!r.published)
|
|
109
111
|
return true; // benefit of the doubt
|
|
110
112
|
const pubTime = new Date(r.published).getTime();
|
|
111
|
-
return !isNaN(pubTime) && pubTime >= cutoff;
|
|
113
|
+
return !Number.isNaN(pubTime) && pubTime >= cutoff;
|
|
112
114
|
});
|
|
113
115
|
}
|
|
114
116
|
// ---------------------------------------------------------------------------
|
|
@@ -281,4 +283,3 @@ export async function exaSearch(query, opts) {
|
|
|
281
283
|
}
|
|
282
284
|
// Exported for testing
|
|
283
285
|
export { enrichQueryForMcp, extractJsonRpcPayload, filterByFreshness, mapApiResults, parseMcpResultBlocks, };
|
|
284
|
-
//# sourceMappingURL=exa-search.js.map
|
package/dist/providers/fred.js
CHANGED
|
@@ -2,6 +2,7 @@ export { getEarnings, getFinancials, getOverview } from "./alpha-vantage.js";
|
|
|
2
2
|
export { getCryptoHistory, getCryptoPrice } from "./coingecko.js";
|
|
3
3
|
export { getFearGreedIndex } from "./fear-greed.js";
|
|
4
4
|
export { getSeries } from "./fred.js";
|
|
5
|
+
export { getLseCandles, getLseFinancialReports, getLseFinancials, type LseCandle, type LseFinancialReportRow, LseHttpError, type LseTimeframe, toLseTimeframe, } from "./lse.js";
|
|
5
6
|
export { getSubredditPosts, scoreSentiment } from "./reddit.js";
|
|
6
7
|
export { type SECFiling, searchFilings } from "./sec-edgar.js";
|
|
7
8
|
export { getQuotes, screenStocks } from "./tradingview.js";
|
package/dist/providers/index.js
CHANGED
|
@@ -2,9 +2,9 @@ export { getEarnings, getFinancials, getOverview } from "./alpha-vantage.js";
|
|
|
2
2
|
export { getCryptoHistory, getCryptoPrice } from "./coingecko.js";
|
|
3
3
|
export { getFearGreedIndex } from "./fear-greed.js";
|
|
4
4
|
export { getSeries } from "./fred.js";
|
|
5
|
+
export { getLseCandles, getLseFinancialReports, getLseFinancials, LseHttpError, toLseTimeframe, } from "./lse.js";
|
|
5
6
|
export { getSubredditPosts, scoreSentiment } from "./reddit.js";
|
|
6
7
|
export { searchFilings } from "./sec-edgar.js";
|
|
7
8
|
export { getQuotes, screenStocks } from "./tradingview.js";
|
|
8
9
|
export { braveSearch, ddgSearch, normalizeFinancialQuery, searchWeb } from "./web-search.js";
|
|
9
10
|
export { clearCrumbCache, computeTimeToExpiry, getHistory, getOptionsChain, getQuote, getYahooCrumb, } from "./yahoo-finance.js";
|
|
10
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { FinancialStatement } from "../types/fundamentals.js";
|
|
2
|
+
export type LseTimeframe = "1m" | "5m" | "15m" | "1h" | "1d" | "1w" | "1mo";
|
|
3
|
+
export interface LseCandle {
|
|
4
|
+
ts: string;
|
|
5
|
+
symbol: string;
|
|
6
|
+
open: number;
|
|
7
|
+
high: number;
|
|
8
|
+
low: number;
|
|
9
|
+
close: number;
|
|
10
|
+
volume: number;
|
|
11
|
+
}
|
|
12
|
+
export type LseFinancialReportRow = Record<string, unknown>;
|
|
13
|
+
interface LseCandleOptions {
|
|
14
|
+
start?: string;
|
|
15
|
+
end?: string;
|
|
16
|
+
order?: "asc" | "desc";
|
|
17
|
+
limit?: number;
|
|
18
|
+
}
|
|
19
|
+
interface LseFinancialReportOptions {
|
|
20
|
+
period?: "FY" | "Q1" | "Q2" | "Q3" | "Q4";
|
|
21
|
+
start?: string;
|
|
22
|
+
end?: string;
|
|
23
|
+
order?: "asc" | "desc";
|
|
24
|
+
limit?: number;
|
|
25
|
+
}
|
|
26
|
+
export declare class LseHttpError extends Error {
|
|
27
|
+
readonly status: number;
|
|
28
|
+
readonly detail: string;
|
|
29
|
+
constructor(status: number, detail: string);
|
|
30
|
+
}
|
|
31
|
+
export declare function getLseCandles(symbol: string, timeframe: LseTimeframe, opts?: LseCandleOptions): Promise<LseCandle[]>;
|
|
32
|
+
export declare function getLseFinancialReports(symbol: string, reportType: "income" | "balance" | "cashflow", opts?: LseFinancialReportOptions): Promise<LseFinancialReportRow[]>;
|
|
33
|
+
export declare function getLseFinancials(symbol: string): Promise<FinancialStatement[]>;
|
|
34
|
+
export declare function toLseTimeframe(interval: string): LseTimeframe | undefined;
|
|
35
|
+
export {};
|