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/routing/router.js
CHANGED
|
@@ -638,6 +638,13 @@ export function postProcessRouterOutput(text, output, inputContext) {
|
|
|
638
638
|
const selectedToolBundles = isConceptualEducationRequest(text, next)
|
|
639
639
|
? []
|
|
640
640
|
: selectToolBundles(next);
|
|
641
|
+
if (isExplicitMacroDataRequest(text) && !selectedToolBundles.includes("macro")) {
|
|
642
|
+
selectedToolBundles.push("macro");
|
|
643
|
+
diagnostics.push({
|
|
644
|
+
code: "macro_tool_bundle_recovered",
|
|
645
|
+
message: "explicit macro data request retained the macro tool bundle",
|
|
646
|
+
});
|
|
647
|
+
}
|
|
641
648
|
if (selectedToolBundles.length === 0 && isConceptualEducationRequest(text, next)) {
|
|
642
649
|
diagnostics.push({
|
|
643
650
|
code: "conceptual_education_no_tools",
|
|
@@ -659,7 +666,7 @@ export function postProcessRouterOutput(text, output, inputContext) {
|
|
|
659
666
|
});
|
|
660
667
|
}
|
|
661
668
|
function isExplicitMacroDataRequest(text) {
|
|
662
|
-
return /\b(?:get_economic_data|fred|cpi|inflation|fed\s+funds?|unemployment|gdp|macro)\b/i.test(text);
|
|
669
|
+
return /\b(?:get_economic_data|fred|cpi|inflation|fed\s+funds?|unemployment|gdp|macro|fear\s*(?:&|and)\s*greed)\b/i.test(text);
|
|
663
670
|
}
|
|
664
671
|
function isConceptualEducationRequest(text, output) {
|
|
665
672
|
if (output.routeKind !== "agent_task")
|
|
@@ -915,7 +922,7 @@ function canonicalizeAssetScopeVocabulary(output) {
|
|
|
915
922
|
}
|
|
916
923
|
function symbolsSlotClaimsPriorTurnUserProvenance(slots, text, priorTurns) {
|
|
917
924
|
const slot = slots.symbols;
|
|
918
|
-
if (
|
|
925
|
+
if (slot?.source !== "user" || !Array.isArray(slot.value))
|
|
919
926
|
return false;
|
|
920
927
|
if (!priorTurns || priorTurns.length === 0)
|
|
921
928
|
return false;
|
|
@@ -1091,4 +1098,3 @@ function minimalFallback(text) {
|
|
|
1091
1098
|
reasoning: "router validation failed; emitted minimal fallback",
|
|
1092
1099
|
};
|
|
1093
1100
|
}
|
|
1094
|
-
//# sourceMappingURL=router.js.map
|
package/dist/routing/types.js
CHANGED
package/dist/runtime/evidence.js
CHANGED
|
@@ -11,7 +11,7 @@ export function toEvidenceRecord(label, result, providerId) {
|
|
|
11
11
|
provenance: {
|
|
12
12
|
source: result.stale ? "stale_cache" : "fetched",
|
|
13
13
|
timestamp: result.timestamp,
|
|
14
|
-
provider: providerId,
|
|
14
|
+
provider: providerId ?? result.provider,
|
|
15
15
|
confidence: result.stale ? 0.5 : undefined,
|
|
16
16
|
},
|
|
17
17
|
};
|
|
@@ -26,4 +26,3 @@ export function toEvidenceRecord(label, result, providerId) {
|
|
|
26
26
|
},
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
|
-
//# sourceMappingURL=evidence.js.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ExtensionAPI, ExtensionCommandContext, ExtensionContext, SessionEntry } from "@earendil-works/pi-coding-agent";
|
|
1
|
+
import type { ExtensionAPI, ExtensionCommandContext, ExtensionContext, ModelRuntime, SessionEntry } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
import { MemoryStorage } from "../memory/index.js";
|
|
3
3
|
/**
|
|
4
4
|
* Alias for the session-manager handle extensions receive via
|
|
@@ -52,7 +52,7 @@ export declare class SessionCoordinator {
|
|
|
52
52
|
/** Run setup flow. */
|
|
53
53
|
runSetup(pi: ExtensionAPI, ctx: ExtensionContext | ExtensionCommandContext, options: {
|
|
54
54
|
mode: "startup" | "manual";
|
|
55
|
-
}): Promise<"ready" | "shutdown" | "cancelled">;
|
|
55
|
+
}, modelRuntime?: ModelRuntime): Promise<"ready" | "shutdown" | "cancelled">;
|
|
56
56
|
/** Extract and persist user preferences from natural language. */
|
|
57
57
|
extractAndStorePreferences(text: string): void;
|
|
58
58
|
/** Record a workflow run in storage. */
|
|
@@ -112,8 +112,8 @@ export class SessionCoordinator {
|
|
|
112
112
|
this.sessionId = sessionId;
|
|
113
113
|
}
|
|
114
114
|
/** Run setup flow. */
|
|
115
|
-
async runSetup(pi, ctx, options) {
|
|
116
|
-
return runOpenCandleSetup(pi, ctx, options);
|
|
115
|
+
async runSetup(pi, ctx, options, modelRuntime) {
|
|
116
|
+
return runOpenCandleSetup(pi, ctx, options, modelRuntime);
|
|
117
117
|
}
|
|
118
118
|
/** Extract and persist user preferences from natural language. */
|
|
119
119
|
extractAndStorePreferences(text) {
|
|
@@ -784,4 +784,3 @@ function shouldIncludeSavedMarketStateContext(workflowType, resolvedTurnContext,
|
|
|
784
784
|
function isPlainObject(value) {
|
|
785
785
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
786
786
|
}
|
|
787
|
-
//# sourceMappingURL=session-coordinator.js.map
|
|
@@ -44,7 +44,7 @@ export class WorkflowRunner {
|
|
|
44
44
|
/** Cancel the active run. */
|
|
45
45
|
cancel() {
|
|
46
46
|
const run = this.activeRun;
|
|
47
|
-
if (
|
|
47
|
+
if (run?.status !== "running")
|
|
48
48
|
return;
|
|
49
49
|
for (let i = run.currentStepIndex; i < run.steps.length; i++) {
|
|
50
50
|
const step = run.steps[i];
|
|
@@ -79,7 +79,7 @@ export class WorkflowRunner {
|
|
|
79
79
|
try {
|
|
80
80
|
const context = {
|
|
81
81
|
runId: run.runId,
|
|
82
|
-
providerTracker: this.
|
|
82
|
+
providerTracker: this.getProviderTracker(),
|
|
83
83
|
};
|
|
84
84
|
const output = await executor(step, i, priorEvidence, context);
|
|
85
85
|
// If run was cancelled during execution, stop without further transitions
|
|
@@ -125,5 +125,10 @@ export class WorkflowRunner {
|
|
|
125
125
|
logEvent(runId, stepIndex, eventType, payload) {
|
|
126
126
|
this.eventLogger?.log(runId, stepIndex, eventType, payload);
|
|
127
127
|
}
|
|
128
|
+
getProviderTracker() {
|
|
129
|
+
if (!this.providerTracker) {
|
|
130
|
+
throw new Error("WorkflowRunner requires a ProviderTracker to execute workflow steps.");
|
|
131
|
+
}
|
|
132
|
+
return this.providerTracker;
|
|
133
|
+
}
|
|
128
134
|
}
|
|
129
|
-
//# sourceMappingURL=workflow-runner.js.map
|
package/dist/sentiment/index.js
CHANGED
|
@@ -27,8 +27,10 @@ export function getSentimentPipeline() {
|
|
|
27
27
|
if (!_pipeline) {
|
|
28
28
|
const store = getSentimentStore();
|
|
29
29
|
const config = getConfig();
|
|
30
|
-
|
|
30
|
+
const sentimentConfig = config.sentiment;
|
|
31
|
+
if (!sentimentConfig)
|
|
32
|
+
throw new Error("Sentiment configuration is missing.");
|
|
33
|
+
_pipeline = new SentimentPipeline(store, sentimentConfig);
|
|
31
34
|
}
|
|
32
35
|
return _pipeline;
|
|
33
36
|
}
|
|
34
|
-
//# sourceMappingURL=index.js.map
|
package/dist/sentiment/scorer.js
CHANGED
package/dist/sentiment/store.js
CHANGED
package/dist/sentiment/trends.js
CHANGED
package/dist/sentiment/types.js
CHANGED
package/dist/system-prompt.js
CHANGED
|
@@ -112,4 +112,3 @@ If you are about to write a response that contains zero tool call results, STOP.
|
|
|
112
112
|
## Assumption Disclosure
|
|
113
113
|
Workflow prompts include a pre-rendered "Assumptions" block with correct source attribution (user-specified, saved preference, or default). Start your response with that block exactly as written. Do NOT independently relabel any value's source anywhere in your response. The assumptions block is the single authoritative provenance representation.${memorySection}`;
|
|
114
114
|
}
|
|
115
|
-
//# sourceMappingURL=system-prompt.js.map
|
package/dist/tool-kit.js
CHANGED
|
@@ -14,6 +14,8 @@ export const companyOverviewTool = {
|
|
|
14
14
|
async execute(_toolCallId, args) {
|
|
15
15
|
return withCredentialCheck("alpha_vantage", async () => {
|
|
16
16
|
const apiKey = getConfig().alphaVantageApiKey;
|
|
17
|
+
if (!apiKey)
|
|
18
|
+
throw new Error("Alpha Vantage credential is missing.");
|
|
17
19
|
const result = await wrapProvider("alphavantage", () => getOverview(args.symbol.toUpperCase(), apiKey));
|
|
18
20
|
if (result.status === "unavailable") {
|
|
19
21
|
return {
|
|
@@ -53,4 +55,3 @@ function formatLargeNumber(n) {
|
|
|
53
55
|
return `${(n / 1e6).toFixed(2)}M`;
|
|
54
56
|
return n.toLocaleString();
|
|
55
57
|
}
|
|
56
|
-
//# sourceMappingURL=company-overview.js.map
|
|
@@ -20,8 +20,8 @@ export function computeComps(companies) {
|
|
|
20
20
|
values[c.symbol] = def.extract(c);
|
|
21
21
|
}
|
|
22
22
|
const nonNull = Object.entries(values)
|
|
23
|
-
.filter((
|
|
24
|
-
.map(([sym, v]) => ({ sym, v
|
|
23
|
+
.filter((entry) => entry[1] != null)
|
|
24
|
+
.map(([sym, v]) => ({ sym, v }));
|
|
25
25
|
const sorted = [...nonNull].sort((a, b) => a.v - b.v);
|
|
26
26
|
const sortedVals = sorted.map((s) => s.v);
|
|
27
27
|
const median = computeMedian(sortedVals);
|
|
@@ -70,12 +70,15 @@ export const compsTool = {
|
|
|
70
70
|
async execute(_toolCallId, args) {
|
|
71
71
|
return withCredentialCheck("alpha_vantage", async () => {
|
|
72
72
|
const config = getConfig();
|
|
73
|
+
const alphaVantageApiKey = config.alphaVantageApiKey;
|
|
74
|
+
if (!alphaVantageApiKey)
|
|
75
|
+
throw new Error("Alpha Vantage credential is missing.");
|
|
73
76
|
const symbols = args.symbols.map((s) => s.toUpperCase());
|
|
74
77
|
const companies = [];
|
|
75
78
|
const unavailableSymbols = [];
|
|
76
79
|
const unavailableReasons = {};
|
|
77
80
|
for (const sym of symbols) {
|
|
78
|
-
const alphaResult = await wrapProvider("alphavantage", () => getOverview(sym,
|
|
81
|
+
const alphaResult = await wrapProvider("alphavantage", () => getOverview(sym, alphaVantageApiKey));
|
|
79
82
|
if (alphaResult.status === "ok") {
|
|
80
83
|
companies.push(alphaResult.data);
|
|
81
84
|
continue;
|
|
@@ -135,4 +138,3 @@ export const compsTool = {
|
|
|
135
138
|
});
|
|
136
139
|
},
|
|
137
140
|
};
|
|
138
|
-
//# sourceMappingURL=comps.js.map
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Type } from "@sinclair/typebox";
|
|
2
2
|
import { getConfig } from "../../config.js";
|
|
3
|
+
import { isOverSoftThreshold } from "../../infra/lse-byte-budget.js";
|
|
3
4
|
import { getFinancials, getOverview } from "../../providers/alpha-vantage.js";
|
|
5
|
+
import { getLseFinancials } from "../../providers/lse.js";
|
|
4
6
|
import { ProviderCredentialError } from "../../providers/provider-credential-error.js";
|
|
5
7
|
import { wrapProvider } from "../../providers/wrap-provider.js";
|
|
6
8
|
import { getQuote, getYahooFinancials } from "../../providers/yahoo-finance.js";
|
|
@@ -129,10 +131,33 @@ export const dcfTool = {
|
|
|
129
131
|
const symbol = args.symbol.toUpperCase();
|
|
130
132
|
const config = getConfig();
|
|
131
133
|
const alphaVantageApiKey = config.alphaVantageApiKey;
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
134
|
+
const quotePromise = wrapProvider("yahoo", () => getQuote(symbol));
|
|
135
|
+
const lseEligible = !!config.lseApiKey && !isOverSoftThreshold();
|
|
136
|
+
let lseFinancialsResult;
|
|
137
|
+
if (lseEligible) {
|
|
138
|
+
try {
|
|
139
|
+
lseFinancialsResult = await wrapProvider("lse", () => getLseFinancials(symbol));
|
|
140
|
+
}
|
|
141
|
+
catch (error) {
|
|
142
|
+
if (error instanceof ProviderCredentialError) {
|
|
143
|
+
lseFinancialsResult = {
|
|
144
|
+
status: "unavailable",
|
|
145
|
+
reason: `London Strategic Edge credential ${error.reason}`,
|
|
146
|
+
provider: "lse",
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
const lseIsFresh = lseFinancialsResult?.status === "ok" &&
|
|
155
|
+
lseFinancialsResult.data.length > 0 &&
|
|
156
|
+
!lseFinancialsResult.stale;
|
|
157
|
+
const alphaVantageFinancialsResult = lseIsFresh
|
|
158
|
+
? undefined
|
|
159
|
+
: await optionalAlphaVantage(alphaVantageApiKey, (apiKey) => getFinancials(symbol, apiKey));
|
|
160
|
+
const quoteResult = await quotePromise;
|
|
136
161
|
const missing = [];
|
|
137
162
|
if (quoteResult.status === "unavailable")
|
|
138
163
|
missing.push(`stock quote (${quoteResult.reason})`);
|
|
@@ -159,17 +184,21 @@ export const dcfTool = {
|
|
|
159
184
|
details: null,
|
|
160
185
|
};
|
|
161
186
|
}
|
|
162
|
-
let financialsSource = "Alpha Vantage";
|
|
187
|
+
let financialsSource = lseIsFresh ? "London Strategic Edge" : "Alpha Vantage";
|
|
163
188
|
let financials;
|
|
164
|
-
if (
|
|
189
|
+
if (lseIsFresh && lseFinancialsResult?.status === "ok") {
|
|
190
|
+
financials = lseFinancialsResult.data;
|
|
191
|
+
}
|
|
192
|
+
else if (alphaVantageFinancialsResult?.status === "ok" &&
|
|
193
|
+
!alphaVantageFinancialsResult.stale) {
|
|
165
194
|
financials = alphaVantageFinancialsResult.data;
|
|
166
195
|
}
|
|
167
196
|
else {
|
|
168
|
-
const alphaVantageReason = alphaVantageFinancialsResult
|
|
197
|
+
const alphaVantageReason = alphaVantageFinancialsResult?.status === "ok"
|
|
169
198
|
? `stale cached financial statements${alphaVantageFinancialsResult.timestamp
|
|
170
199
|
? ` from ${alphaVantageFinancialsResult.timestamp}`
|
|
171
200
|
: ""}`
|
|
172
|
-
: alphaVantageFinancialsResult
|
|
201
|
+
: (alphaVantageFinancialsResult?.reason ?? "Alpha Vantage unavailable");
|
|
173
202
|
const yahooFinancialsResult = await wrapProvider("yahoo", () => getYahooFinancials(symbol));
|
|
174
203
|
if (yahooFinancialsResult.status === "unavailable") {
|
|
175
204
|
return {
|
|
@@ -325,4 +354,3 @@ function formatSensitivityTable(table) {
|
|
|
325
354
|
});
|
|
326
355
|
return [header, ...rows];
|
|
327
356
|
}
|
|
328
|
-
//# sourceMappingURL=dcf.js.map
|
|
@@ -14,6 +14,8 @@ export const earningsTool = {
|
|
|
14
14
|
async execute(_toolCallId, args) {
|
|
15
15
|
return withCredentialCheck("alpha_vantage", async () => {
|
|
16
16
|
const apiKey = getConfig().alphaVantageApiKey;
|
|
17
|
+
if (!apiKey)
|
|
18
|
+
throw new Error("Alpha Vantage credential is missing.");
|
|
17
19
|
const result = await wrapProvider("alphavantage", () => getEarnings(args.symbol.toUpperCase(), apiKey));
|
|
18
20
|
if (result.status === "unavailable") {
|
|
19
21
|
return {
|
|
@@ -43,4 +45,3 @@ export const earningsTool = {
|
|
|
43
45
|
});
|
|
44
46
|
},
|
|
45
47
|
};
|
|
46
|
-
//# sourceMappingURL=earnings.js.map
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { Type } from "@sinclair/typebox";
|
|
2
2
|
import { getConfig } from "../../config.js";
|
|
3
|
+
import { isOverSoftThreshold } from "../../infra/lse-byte-budget.js";
|
|
3
4
|
import { withCredentialCheck } from "../../onboarding/tool-helpers.js";
|
|
4
5
|
import { getFinancials } from "../../providers/alpha-vantage.js";
|
|
6
|
+
import { getLseFinancials } from "../../providers/lse.js";
|
|
7
|
+
import { ProviderCredentialError } from "../../providers/provider-credential-error.js";
|
|
5
8
|
import { wrapProvider } from "../../providers/wrap-provider.js";
|
|
6
9
|
const params = Type.Object({
|
|
7
10
|
symbol: Type.String({ description: "Stock ticker symbol (e.g. AAPL, MSFT)" }),
|
|
@@ -9,18 +12,18 @@ const params = Type.Object({
|
|
|
9
12
|
export const financialsTool = {
|
|
10
13
|
name: "get_financials",
|
|
11
14
|
label: "Financial Statements",
|
|
12
|
-
description: "Get annual income statement data: revenue, gross profit, operating income, net income, and EPS.
|
|
15
|
+
description: "Get annual income statement data: revenue, gross profit, operating income, net income, and EPS. Uses London Strategic Edge or Alpha Vantage.",
|
|
13
16
|
parameters: params,
|
|
14
17
|
async execute(_toolCallId, args) {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
+
const symbol = args.symbol.toUpperCase();
|
|
19
|
+
const config = getConfig();
|
|
20
|
+
const renderResult = (result, source) => {
|
|
18
21
|
if (result.status === "unavailable") {
|
|
19
22
|
return {
|
|
20
23
|
content: [
|
|
21
24
|
{
|
|
22
25
|
type: "text",
|
|
23
|
-
text: `⚠ Financial statements unavailable for ${
|
|
26
|
+
text: `⚠ Financial statements unavailable for ${symbol} (${result.reason}). Analysis will proceed without financials.`,
|
|
24
27
|
},
|
|
25
28
|
],
|
|
26
29
|
details: [],
|
|
@@ -33,10 +36,87 @@ export const financialsTool = {
|
|
|
33
36
|
details: [],
|
|
34
37
|
};
|
|
35
38
|
}
|
|
36
|
-
const header = `${
|
|
39
|
+
const header = `${symbol} — Annual Income Statement (${statements.length} years)`;
|
|
37
40
|
const rows = statements.map((s) => `${s.fiscalDate} | Rev: $${fmt(s.revenue)} | GP: $${fmt(s.grossProfit)} | OpInc: $${fmt(s.operatingIncome)} | Net: $${fmt(s.netIncome)}`);
|
|
38
|
-
const
|
|
39
|
-
|
|
41
|
+
const sourceLine = source ? [`Source: ${source}`] : [];
|
|
42
|
+
const staleLine = result.stale
|
|
43
|
+
? [`Data status: stale cache from ${result.timestamp} (provider unavailable)`]
|
|
44
|
+
: [];
|
|
45
|
+
return {
|
|
46
|
+
content: [
|
|
47
|
+
{
|
|
48
|
+
type: "text",
|
|
49
|
+
text: [header, ...sourceLine, ...staleLine, ...rows].join("\n"),
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
details: statements,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
const runAlphaVantageOnly = () => withCredentialCheck("alpha_vantage", async () => {
|
|
56
|
+
const apiKey = getConfig().alphaVantageApiKey;
|
|
57
|
+
if (!apiKey)
|
|
58
|
+
throw new Error("Alpha Vantage credential is missing.");
|
|
59
|
+
const result = await wrapProvider("alphavantage", () => getFinancials(symbol, apiKey));
|
|
60
|
+
return renderResult(result);
|
|
61
|
+
});
|
|
62
|
+
const lseEligible = !!config.lseApiKey && !isOverSoftThreshold();
|
|
63
|
+
if (!lseEligible)
|
|
64
|
+
return runAlphaVantageOnly();
|
|
65
|
+
const lseEntry = {
|
|
66
|
+
provider: "lse",
|
|
67
|
+
fn: async () => {
|
|
68
|
+
try {
|
|
69
|
+
const statements = await getLseFinancials(symbol);
|
|
70
|
+
if (statements.length === 0)
|
|
71
|
+
throw new Error("no financial statements returned");
|
|
72
|
+
return statements;
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (error instanceof ProviderCredentialError) {
|
|
76
|
+
throw new Error(`London Strategic Edge credential ${error.reason}`);
|
|
77
|
+
}
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
if (!config.alphaVantageApiKey) {
|
|
83
|
+
const result = await wrapProvider(lseEntry.provider, lseEntry.fn);
|
|
84
|
+
if (result.status === "ok")
|
|
85
|
+
return renderResult(result, "London Strategic Edge");
|
|
86
|
+
return runAlphaVantageOnly();
|
|
87
|
+
}
|
|
88
|
+
return withCredentialCheck("alpha_vantage", async () => {
|
|
89
|
+
const apiKey = config.alphaVantageApiKey;
|
|
90
|
+
if (!apiKey)
|
|
91
|
+
throw new Error("Alpha Vantage credential is missing.");
|
|
92
|
+
const lseResult = await wrapProvider(lseEntry.provider, lseEntry.fn);
|
|
93
|
+
if (lseResult.status === "ok" && !lseResult.stale) {
|
|
94
|
+
return renderResult(lseResult, "London Strategic Edge");
|
|
95
|
+
}
|
|
96
|
+
let alphaVantageResult;
|
|
97
|
+
try {
|
|
98
|
+
alphaVantageResult = await wrapProvider("alphavantage", () => getFinancials(symbol, apiKey));
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
if (error instanceof ProviderCredentialError && lseResult.status === "ok") {
|
|
102
|
+
return renderResult(lseResult, "London Strategic Edge");
|
|
103
|
+
}
|
|
104
|
+
throw error;
|
|
105
|
+
}
|
|
106
|
+
if (alphaVantageResult.status === "ok" && !alphaVantageResult.stale) {
|
|
107
|
+
return renderResult(alphaVantageResult, "Alpha Vantage");
|
|
108
|
+
}
|
|
109
|
+
if (lseResult.status === "ok") {
|
|
110
|
+
return renderResult(lseResult, "London Strategic Edge");
|
|
111
|
+
}
|
|
112
|
+
if (alphaVantageResult.status === "ok") {
|
|
113
|
+
return renderResult(alphaVantageResult, "Alpha Vantage");
|
|
114
|
+
}
|
|
115
|
+
return renderResult({
|
|
116
|
+
status: "unavailable",
|
|
117
|
+
provider: "fallback",
|
|
118
|
+
reason: `lse: ${lseResult.reason}; alphavantage: ${alphaVantageResult.reason}`,
|
|
119
|
+
});
|
|
40
120
|
});
|
|
41
121
|
},
|
|
42
122
|
};
|
|
@@ -47,4 +127,3 @@ function fmt(n) {
|
|
|
47
127
|
return `${(n / 1e6).toFixed(2)}M`;
|
|
48
128
|
return n.toLocaleString();
|
|
49
129
|
}
|
|
50
|
-
//# sourceMappingURL=financials.js.map
|