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/memory/sqlite.js
CHANGED
|
@@ -2,7 +2,7 @@ import { mkdirSync } from "node:fs";
|
|
|
2
2
|
import { dirname } from "node:path";
|
|
3
3
|
import Database from "better-sqlite3";
|
|
4
4
|
import { ensureOpenCandleHomeDir, getStateDbPath } from "../infra/opencandle-paths.js";
|
|
5
|
-
const CURRENT_SCHEMA_VERSION =
|
|
5
|
+
const CURRENT_SCHEMA_VERSION = 9;
|
|
6
6
|
const CURRENT_SCHEMA = `
|
|
7
7
|
CREATE TABLE IF NOT EXISTS schema_version (
|
|
8
8
|
version INTEGER NOT NULL
|
|
@@ -105,7 +105,8 @@ const CURRENT_SCHEMA = `
|
|
|
105
105
|
name TEXT NOT NULL,
|
|
106
106
|
is_default INTEGER NOT NULL DEFAULT 0,
|
|
107
107
|
created_at TEXT NOT NULL,
|
|
108
|
-
updated_at TEXT NOT NULL
|
|
108
|
+
updated_at TEXT NOT NULL,
|
|
109
|
+
UNIQUE(name)
|
|
109
110
|
);
|
|
110
111
|
|
|
111
112
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_watchlists_one_default
|
|
@@ -116,12 +117,6 @@ const CURRENT_SCHEMA = `
|
|
|
116
117
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
117
118
|
watchlist_id INTEGER NOT NULL,
|
|
118
119
|
instrument_id INTEGER NOT NULL,
|
|
119
|
-
thesis TEXT,
|
|
120
|
-
notes TEXT,
|
|
121
|
-
tags_json TEXT,
|
|
122
|
-
target_price REAL,
|
|
123
|
-
stop_price REAL,
|
|
124
|
-
price_currency TEXT,
|
|
125
120
|
source TEXT,
|
|
126
121
|
source_row_id TEXT,
|
|
127
122
|
source_metadata_json TEXT,
|
|
@@ -355,19 +350,26 @@ function ensureCurrentSchema(db) {
|
|
|
355
350
|
db.exec(CURRENT_SCHEMA);
|
|
356
351
|
return;
|
|
357
352
|
}
|
|
353
|
+
if (currentVersion === 8) {
|
|
354
|
+
migrateV8ToV9(db);
|
|
355
|
+
return;
|
|
356
|
+
}
|
|
358
357
|
if (currentVersion === 7) {
|
|
359
358
|
migrateV7ToV8(db);
|
|
359
|
+
migrateV8ToV9(db);
|
|
360
360
|
return;
|
|
361
361
|
}
|
|
362
362
|
if (currentVersion === 6) {
|
|
363
363
|
migrateV6ToV7(db);
|
|
364
364
|
migrateV7ToV8(db);
|
|
365
|
+
migrateV8ToV9(db);
|
|
365
366
|
return;
|
|
366
367
|
}
|
|
367
368
|
if (currentVersion === 5) {
|
|
368
369
|
migrateV5ToV6(db);
|
|
369
370
|
migrateV6ToV7(db);
|
|
370
371
|
migrateV7ToV8(db);
|
|
372
|
+
migrateV8ToV9(db);
|
|
371
373
|
return;
|
|
372
374
|
}
|
|
373
375
|
if (currentVersion === 4) {
|
|
@@ -375,6 +377,7 @@ function ensureCurrentSchema(db) {
|
|
|
375
377
|
migrateV5ToV6(db);
|
|
376
378
|
migrateV6ToV7(db);
|
|
377
379
|
migrateV7ToV8(db);
|
|
380
|
+
migrateV8ToV9(db);
|
|
378
381
|
return;
|
|
379
382
|
}
|
|
380
383
|
if (currentVersion === 3) {
|
|
@@ -383,10 +386,12 @@ function ensureCurrentSchema(db) {
|
|
|
383
386
|
migrateV5ToV6(db);
|
|
384
387
|
migrateV6ToV7(db);
|
|
385
388
|
migrateV7ToV8(db);
|
|
389
|
+
migrateV8ToV9(db);
|
|
386
390
|
return;
|
|
387
391
|
}
|
|
388
|
-
// Additive v2 → v3 → ...
|
|
389
|
-
// prediction_records
|
|
392
|
+
// Additive v2 → v3 → ... migration without dropping data (v8 drops
|
|
393
|
+
// prediction_records and v9 drops watchlist item annotation columns as
|
|
394
|
+
// explicit feature removals).
|
|
390
395
|
if (currentVersion === 2) {
|
|
391
396
|
migrateV2ToV3(db);
|
|
392
397
|
migrateV3ToV4(db);
|
|
@@ -394,6 +399,7 @@ function ensureCurrentSchema(db) {
|
|
|
394
399
|
migrateV5ToV6(db);
|
|
395
400
|
migrateV6ToV7(db);
|
|
396
401
|
migrateV7ToV8(db);
|
|
402
|
+
migrateV8ToV9(db);
|
|
397
403
|
return;
|
|
398
404
|
}
|
|
399
405
|
// Any other mismatch (null first-run, or a foreign schema): reset.
|
|
@@ -456,6 +462,50 @@ function migrateV7ToV8(db) {
|
|
|
456
462
|
// Predictions feature removal: dropping prediction_records is the explicit,
|
|
457
463
|
// documented destructive step for this table; all other rows are preserved.
|
|
458
464
|
db.exec("DROP TABLE IF EXISTS prediction_records");
|
|
465
|
+
db.exec(CURRENT_SCHEMA);
|
|
466
|
+
db.prepare("DELETE FROM schema_version").run();
|
|
467
|
+
db.prepare("INSERT INTO schema_version (version) VALUES (?)").run(8);
|
|
468
|
+
}
|
|
469
|
+
function migrateV8ToV9(db) {
|
|
470
|
+
db.exec(`
|
|
471
|
+
CREATE TABLE IF NOT EXISTS watchlists_v9 (
|
|
472
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
473
|
+
name TEXT NOT NULL,
|
|
474
|
+
is_default INTEGER NOT NULL DEFAULT 0,
|
|
475
|
+
created_at TEXT NOT NULL,
|
|
476
|
+
updated_at TEXT NOT NULL,
|
|
477
|
+
UNIQUE(name)
|
|
478
|
+
);
|
|
479
|
+
|
|
480
|
+
INSERT OR IGNORE INTO watchlists_v9 (id, name, is_default, created_at, updated_at)
|
|
481
|
+
SELECT id, name, is_default, created_at, updated_at FROM watchlists;
|
|
482
|
+
|
|
483
|
+
DROP TABLE IF EXISTS watchlist_items_v9;
|
|
484
|
+
CREATE TABLE watchlist_items_v9 (
|
|
485
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
486
|
+
watchlist_id INTEGER NOT NULL,
|
|
487
|
+
instrument_id INTEGER NOT NULL,
|
|
488
|
+
source TEXT,
|
|
489
|
+
source_row_id TEXT,
|
|
490
|
+
source_metadata_json TEXT,
|
|
491
|
+
created_at TEXT NOT NULL,
|
|
492
|
+
updated_at TEXT NOT NULL,
|
|
493
|
+
UNIQUE(watchlist_id, instrument_id),
|
|
494
|
+
FOREIGN KEY (watchlist_id) REFERENCES watchlists_v9(id) ON DELETE CASCADE,
|
|
495
|
+
FOREIGN KEY (instrument_id) REFERENCES instruments(id) ON DELETE RESTRICT
|
|
496
|
+
);
|
|
497
|
+
|
|
498
|
+
INSERT OR IGNORE INTO watchlist_items_v9 (
|
|
499
|
+
id, watchlist_id, instrument_id, source, source_row_id, source_metadata_json, created_at, updated_at
|
|
500
|
+
)
|
|
501
|
+
SELECT id, watchlist_id, instrument_id, source, source_row_id, source_metadata_json, created_at, updated_at
|
|
502
|
+
FROM watchlist_items;
|
|
503
|
+
|
|
504
|
+
DROP TABLE watchlist_items;
|
|
505
|
+
DROP TABLE watchlists;
|
|
506
|
+
ALTER TABLE watchlists_v9 RENAME TO watchlists;
|
|
507
|
+
ALTER TABLE watchlist_items_v9 RENAME TO watchlist_items;
|
|
508
|
+
`);
|
|
459
509
|
db.exec(CURRENT_SCHEMA);
|
|
460
510
|
db.prepare("DELETE FROM schema_version").run();
|
|
461
511
|
db.prepare("INSERT INTO schema_version (version) VALUES (?)").run(CURRENT_SCHEMA_VERSION);
|
|
@@ -524,4 +574,3 @@ export function getSchemaVersion(db) {
|
|
|
524
574
|
const row = db.prepare("SELECT version FROM schema_version LIMIT 1").get();
|
|
525
575
|
return row?.version ?? 0;
|
|
526
576
|
}
|
|
527
|
-
//# sourceMappingURL=sqlite.js.map
|
package/dist/memory/storage.js
CHANGED
package/dist/memory/types.js
CHANGED
package/dist/monitor.js
CHANGED
|
@@ -20,4 +20,4 @@ export interface PromptResult {
|
|
|
20
20
|
*
|
|
21
21
|
* When neither a handler nor a UI is available, returns `{answer: null, cancelled: true}`.
|
|
22
22
|
*/
|
|
23
|
-
export declare function promptUser(ctx: ExtensionContext, opts: PromptOptions, handler?: AskUserHandler): Promise<PromptResult>;
|
|
23
|
+
export declare function promptUser(ctx: ExtensionContext | undefined, opts: PromptOptions, handler?: AskUserHandler): Promise<PromptResult>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type ApiKeyProviderId = "alpha_vantage" | "fred" | "finnhub" | "brave" | "exa";
|
|
1
|
+
export type ApiKeyProviderId = "alpha_vantage" | "fred" | "finnhub" | "brave" | "exa" | "lse";
|
|
2
2
|
export type ExternalToolProviderId = "twitter" | "reddit";
|
|
3
3
|
export type PublicHttpProviderId = "polymarket" | "tradingview" | "yahoo";
|
|
4
4
|
export type ProviderId = ApiKeyProviderId | ExternalToolProviderId | PublicHttpProviderId;
|
|
@@ -127,6 +127,21 @@ export declare const PROVIDERS: readonly [{
|
|
|
127
127
|
readonly fallbackDescription: "Exa search continues to work via the keyless Exa MCP endpoint, which has lower rate limits but similar quality";
|
|
128
128
|
readonly snoozeDurationDays: 7;
|
|
129
129
|
readonly instructionsHint: "Paid with free tier, signup opens in your browser";
|
|
130
|
+
}, {
|
|
131
|
+
readonly id: "lse";
|
|
132
|
+
readonly kind: "api-key";
|
|
133
|
+
readonly displayName: "London Strategic Edge";
|
|
134
|
+
readonly category: "market";
|
|
135
|
+
readonly tier: "soft";
|
|
136
|
+
readonly aliases: readonly ["lse", "london strategic edge", "londonstrategicedge"];
|
|
137
|
+
readonly signupUrl: "https://londonstrategicedge.com/databank";
|
|
138
|
+
readonly freeTier: true;
|
|
139
|
+
readonly envVar: "LSE_API_KEY";
|
|
140
|
+
readonly configPath: readonly ["providers", "lse", "apiKey"];
|
|
141
|
+
readonly unlocks: readonly ["financial statements (income, balance sheet, and cash flow)", "deep split-adjusted intraday history back to 2003"];
|
|
142
|
+
readonly fallbackDescription: "Market data continues through Yahoo Finance and Alpha Vantage when London Strategic Edge is unavailable";
|
|
143
|
+
readonly snoozeDurationDays: 7;
|
|
144
|
+
readonly instructionsHint: "Free, about 30 seconds, signup opens in your browser";
|
|
130
145
|
}, {
|
|
131
146
|
readonly id: "yahoo";
|
|
132
147
|
readonly kind: "public-http";
|
|
@@ -112,6 +112,25 @@ export const PROVIDERS = [
|
|
|
112
112
|
snoozeDurationDays: 7,
|
|
113
113
|
instructionsHint: "Paid with free tier, signup opens in your browser",
|
|
114
114
|
},
|
|
115
|
+
{
|
|
116
|
+
id: "lse",
|
|
117
|
+
kind: "api-key",
|
|
118
|
+
displayName: "London Strategic Edge",
|
|
119
|
+
category: "market",
|
|
120
|
+
tier: "soft",
|
|
121
|
+
aliases: ["lse", "london strategic edge", "londonstrategicedge"],
|
|
122
|
+
signupUrl: "https://londonstrategicedge.com/databank",
|
|
123
|
+
freeTier: true,
|
|
124
|
+
envVar: "LSE_API_KEY",
|
|
125
|
+
configPath: ["providers", "lse", "apiKey"],
|
|
126
|
+
unlocks: [
|
|
127
|
+
"financial statements (income, balance sheet, and cash flow)",
|
|
128
|
+
"deep split-adjusted intraday history back to 2003",
|
|
129
|
+
],
|
|
130
|
+
fallbackDescription: "Market data continues through Yahoo Finance and Alpha Vantage when London Strategic Edge is unavailable",
|
|
131
|
+
snoozeDurationDays: 7,
|
|
132
|
+
instructionsHint: "Free, about 30 seconds, signup opens in your browser",
|
|
133
|
+
},
|
|
115
134
|
{
|
|
116
135
|
id: "yahoo",
|
|
117
136
|
kind: "public-http",
|
|
@@ -255,6 +274,7 @@ const CONFIG_FIELD_BY_ID = {
|
|
|
255
274
|
finnhub: "finnhubApiKey",
|
|
256
275
|
brave: "braveApiKey",
|
|
257
276
|
exa: "exaApiKey",
|
|
277
|
+
lse: "lseApiKey",
|
|
258
278
|
};
|
|
259
279
|
export function hasCredential(id) {
|
|
260
280
|
const descriptor = getProvider(id);
|
|
@@ -327,4 +347,3 @@ export function resolveProviderFromArgument(arg) {
|
|
|
327
347
|
}
|
|
328
348
|
return undefined;
|
|
329
349
|
}
|
|
330
|
-
//# sourceMappingURL=providers.js.map
|
package/dist/onboarding/state.js
CHANGED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export type ModelKeyProviderId = "google" | "openai" | "anthropic";
|
|
2
|
+
export type ModelKeyValidationResult = {
|
|
3
|
+
status: "valid";
|
|
4
|
+
providerLabel: string;
|
|
5
|
+
} | {
|
|
6
|
+
status: "invalid";
|
|
7
|
+
providerLabel: string;
|
|
8
|
+
} | {
|
|
9
|
+
status: "transient";
|
|
10
|
+
providerLabel: string;
|
|
11
|
+
reason: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Checks whether an API key is accepted by a model provider without saving it.
|
|
15
|
+
* Transient failures deliberately permit saving so offline setup remains usable.
|
|
16
|
+
*/
|
|
17
|
+
export declare function validateModelKey(providerId: ModelKeyProviderId, key: string): Promise<ModelKeyValidationResult>;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
const VALIDATION_TIMEOUT_MS = 5_000;
|
|
2
|
+
const MODEL_KEY_PROBE_BASE_URL_ENV = "OPENCANDLE_MODEL_KEY_PROBE_BASE_URL";
|
|
3
|
+
const MODEL_KEY_PROBES = {
|
|
4
|
+
google: {
|
|
5
|
+
label: "Google Gemini",
|
|
6
|
+
url: "https://generativelanguage.googleapis.com/v1beta/models",
|
|
7
|
+
headers: (key) => ({ "x-goog-api-key": key }),
|
|
8
|
+
},
|
|
9
|
+
openai: {
|
|
10
|
+
label: "OpenAI",
|
|
11
|
+
url: "https://api.openai.com/v1/models",
|
|
12
|
+
headers: (key) => ({ Authorization: `Bearer ${key}` }),
|
|
13
|
+
},
|
|
14
|
+
anthropic: {
|
|
15
|
+
label: "Anthropic",
|
|
16
|
+
url: "https://api.anthropic.com/v1/models",
|
|
17
|
+
headers: (key) => ({ "x-api-key": key, "anthropic-version": "2023-06-01" }),
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Checks whether an API key is accepted by a model provider without saving it.
|
|
22
|
+
* Transient failures deliberately permit saving so offline setup remains usable.
|
|
23
|
+
*/
|
|
24
|
+
export async function validateModelKey(providerId, key) {
|
|
25
|
+
const probe = MODEL_KEY_PROBES[providerId];
|
|
26
|
+
try {
|
|
27
|
+
const response = await fetch(resolveProbeUrl(probe.url), {
|
|
28
|
+
method: "GET",
|
|
29
|
+
headers: probe.headers(key),
|
|
30
|
+
signal: AbortSignal.timeout(VALIDATION_TIMEOUT_MS),
|
|
31
|
+
// Probes carry the typed key in headers that survive cross-origin
|
|
32
|
+
// redirects (x-goog-api-key, x-api-key); provider probe endpoints do
|
|
33
|
+
// not redirect, so any redirect is treated as a transient failure
|
|
34
|
+
// rather than followed.
|
|
35
|
+
redirect: "error",
|
|
36
|
+
});
|
|
37
|
+
if (response.status === 401 || response.status === 403) {
|
|
38
|
+
return { status: "invalid", providerLabel: probe.label };
|
|
39
|
+
}
|
|
40
|
+
if (!response.ok) {
|
|
41
|
+
// Google reports bad keys as 400 INVALID_ARGUMENT / API_KEY_INVALID
|
|
42
|
+
// rather than 401.
|
|
43
|
+
if (response.status === 400) {
|
|
44
|
+
const body = await response.text().catch(() => "");
|
|
45
|
+
if (/API_KEY_INVALID|API key not valid/i.test(body)) {
|
|
46
|
+
return { status: "invalid", providerLabel: probe.label };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return { status: "transient", providerLabel: probe.label, reason: `HTTP ${response.status}` };
|
|
50
|
+
}
|
|
51
|
+
return { status: "valid", providerLabel: probe.label };
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
return {
|
|
55
|
+
status: "transient",
|
|
56
|
+
providerLabel: probe.label,
|
|
57
|
+
reason: error instanceof Error ? error.message : String(error),
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function resolveProbeUrl(probeUrl) {
|
|
62
|
+
const override = process.env[MODEL_KEY_PROBE_BASE_URL_ENV]?.trim();
|
|
63
|
+
if (!override)
|
|
64
|
+
return probeUrl;
|
|
65
|
+
// Test-support hook only. Overrides are limited to loopback hosts because
|
|
66
|
+
// the probe request carries the typed API key in its headers; honoring an
|
|
67
|
+
// arbitrary origin (for example from a poisoned .env) would forward that
|
|
68
|
+
// key to a foreign host.
|
|
69
|
+
let baseUrl;
|
|
70
|
+
try {
|
|
71
|
+
baseUrl = new URL(override);
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
return probeUrl;
|
|
75
|
+
}
|
|
76
|
+
if (!isLoopbackHostname(baseUrl.hostname))
|
|
77
|
+
return probeUrl;
|
|
78
|
+
const url = new URL(probeUrl);
|
|
79
|
+
url.protocol = baseUrl.protocol;
|
|
80
|
+
url.host = baseUrl.host;
|
|
81
|
+
return url.toString();
|
|
82
|
+
}
|
|
83
|
+
function isLoopbackHostname(hostname) {
|
|
84
|
+
const host = hostname.toLowerCase();
|
|
85
|
+
return (host === "localhost" || host === "::1" || host === "[::1]" || /^127(\.\d{1,3}){3}$/.test(host));
|
|
86
|
+
}
|
|
@@ -112,6 +112,13 @@ export async function validateCredential(providerId, key) {
|
|
|
112
112
|
},
|
|
113
113
|
body: JSON.stringify({ query: "test", numResults: 1 }),
|
|
114
114
|
});
|
|
115
|
+
case "lse":
|
|
116
|
+
return validateWithFetch("https://api.londonstrategicedge.com/vault/candles?symbol=AAPL&timeframe=1d&limit=1", {
|
|
117
|
+
method: "GET",
|
|
118
|
+
headers: {
|
|
119
|
+
"x-api-key": key,
|
|
120
|
+
Accept: "application/json",
|
|
121
|
+
},
|
|
122
|
+
});
|
|
115
123
|
}
|
|
116
124
|
}
|
|
117
|
-
//# sourceMappingURL=validation.js.map
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import type { ExtensionAPI } from "@earendil-works/pi-coding-agent";
|
|
1
|
+
import type { ExtensionAPI, ModelRuntime } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
import type { InstrumentCandidate } from "../market-state/resolve.js";
|
|
3
3
|
import type { RouterLlmClient } from "../routing/router-types.js";
|
|
4
4
|
import type { AskUserHandler } from "../types/index.js";
|
|
5
5
|
export interface OpenCandleExtensionOptions {
|
|
6
|
+
modelRuntime?: ModelRuntime;
|
|
6
7
|
askUserHandler?: AskUserHandler;
|
|
7
8
|
/**
|
|
8
9
|
* Optional router LLM client. When provided, this instance is used instead
|
|
@@ -78,7 +78,7 @@ export default function openCandleExtension(pi, options) {
|
|
|
78
78
|
pi.registerCommand("setup", {
|
|
79
79
|
description: "Reconfigure the OpenCandle AI model (sign-in or API key)",
|
|
80
80
|
handler: async (_args, ctx) => {
|
|
81
|
-
const result = await coordinator.runSetup(pi, ctx, { mode: "manual" });
|
|
81
|
+
const result = await coordinator.runSetup(pi, ctx, { mode: "manual" }, options?.modelRuntime);
|
|
82
82
|
if (result === "ready") {
|
|
83
83
|
ctx.ui.notify("OpenCandle setup complete.", "info");
|
|
84
84
|
}
|
|
@@ -173,7 +173,7 @@ export default function openCandleExtension(pi, options) {
|
|
|
173
173
|
// entering the LLM's conversation context (unlike `sendMessage`, which Pi
|
|
174
174
|
// reinjects as a `role:"user"` message every turn).
|
|
175
175
|
ctx.ui.setStatus("opencandle-disclaimer", DISCLAIMER_TEXT);
|
|
176
|
-
const result = await coordinator.runSetup(pi, ctx, { mode: "startup" });
|
|
176
|
+
const result = await coordinator.runSetup(pi, ctx, { mode: "startup" }, options?.modelRuntime);
|
|
177
177
|
if (result === "shutdown") {
|
|
178
178
|
return;
|
|
179
179
|
}
|
|
@@ -690,6 +690,8 @@ export default function openCandleExtension(pi, options) {
|
|
|
690
690
|
}
|
|
691
691
|
async function dispatchRouterWorkflow(output, ctx, originalText) {
|
|
692
692
|
const workflow = output.workflow;
|
|
693
|
+
if (!workflow)
|
|
694
|
+
return false;
|
|
693
695
|
const storage = coordinator.getStorage();
|
|
694
696
|
const workflowPrefs = storage?.getWorkflowPreferences("global") ?? {};
|
|
695
697
|
const entities = mergeRouterSlotsIntoEntities(output);
|
|
@@ -988,7 +990,6 @@ export default function openCandleExtension(pi, options) {
|
|
|
988
990
|
const model = ctx.model;
|
|
989
991
|
if (!model)
|
|
990
992
|
return null;
|
|
991
|
-
// biome-ignore lint/suspicious/noExplicitAny: Pi typings keep Model generic
|
|
992
993
|
return createPiAiRouterClient(model);
|
|
993
994
|
}
|
|
994
995
|
// System prompt assembly — delegate to coordinator. When a fallback context
|
|
@@ -1065,4 +1066,3 @@ function isPlaceholderSessionName(name, candidates) {
|
|
|
1065
1066
|
}
|
|
1066
1067
|
return false;
|
|
1067
1068
|
}
|
|
1068
|
-
//# sourceMappingURL=opencandle-extension.js.map
|
package/dist/pi/session.d.ts
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type CreateAgentSessionResult, type ModelRuntime, type SessionManager, type SettingsManager } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
import type { AskUserHandler } from "../types/index.js";
|
|
3
3
|
export interface CreateOpenCandleSessionOptions {
|
|
4
4
|
cwd?: string;
|
|
5
5
|
agentDir?: string;
|
|
6
|
-
|
|
7
|
-
modelRegistry?: ModelRegistry;
|
|
6
|
+
modelRuntime?: ModelRuntime;
|
|
8
7
|
settingsManager?: SettingsManager;
|
|
9
8
|
sessionManager?: SessionManager;
|
|
10
9
|
useInlineExtension?: boolean;
|
package/dist/pi/session.js
CHANGED
|
@@ -14,7 +14,10 @@ export async function createOpenCandleSession(options = {}) {
|
|
|
14
14
|
agentDir,
|
|
15
15
|
settingsManager: options.settingsManager,
|
|
16
16
|
extensionFactories: [
|
|
17
|
-
(pi) => openCandleExtension(pi, {
|
|
17
|
+
(pi) => openCandleExtension(pi, {
|
|
18
|
+
askUserHandler: options.askUserHandler,
|
|
19
|
+
modelRuntime: options.modelRuntime,
|
|
20
|
+
}),
|
|
18
21
|
],
|
|
19
22
|
})
|
|
20
23
|
: undefined;
|
|
@@ -24,8 +27,7 @@ export async function createOpenCandleSession(options = {}) {
|
|
|
24
27
|
const result = await createAgentSession({
|
|
25
28
|
cwd,
|
|
26
29
|
agentDir,
|
|
27
|
-
|
|
28
|
-
modelRegistry: options.modelRegistry,
|
|
30
|
+
modelRuntime: options.modelRuntime,
|
|
29
31
|
sessionManager: options.sessionManager,
|
|
30
32
|
settingsManager: options.settingsManager,
|
|
31
33
|
resourceLoader,
|
|
@@ -42,12 +44,11 @@ async function applySavedDefaultModel(result) {
|
|
|
42
44
|
const modelId = result.session.settingsManager.getDefaultModel();
|
|
43
45
|
if (!provider || !modelId)
|
|
44
46
|
return;
|
|
45
|
-
const savedDefault = result.session.
|
|
46
|
-
if (!savedDefault || !result.session.
|
|
47
|
+
const savedDefault = result.session.modelRuntime.getModel(provider, modelId);
|
|
48
|
+
if (!savedDefault || !result.session.modelRuntime.hasConfiguredAuth(savedDefault.provider))
|
|
47
49
|
return;
|
|
48
50
|
const current = result.session.model;
|
|
49
51
|
if (current?.provider === savedDefault.provider && current.id === savedDefault.id)
|
|
50
52
|
return;
|
|
51
53
|
await result.session.setModel(savedDefault);
|
|
52
54
|
}
|
|
53
|
-
//# sourceMappingURL=session.js.map
|
package/dist/pi/setup.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import { type ExtensionAPI, type ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
1
|
+
import { type ExtensionAPI, type ExtensionContext, type ModelRuntime } from "@earendil-works/pi-coding-agent";
|
|
2
2
|
type SetupMode = "startup" | "manual";
|
|
3
3
|
type SetupRequirement = "ready" | "select_model" | "connect_auth";
|
|
4
|
+
type ApiKeyProviderId = "google" | "openai" | "anthropic";
|
|
4
5
|
type SetupResult = "ready" | "shutdown" | "cancelled";
|
|
5
6
|
export declare function getLlmSetupRequirement(ctx: Pick<ExtensionContext, "model" | "modelRegistry">): SetupRequirement;
|
|
7
|
+
export declare function runApiKeySetup(ctx: ExtensionContext, provider: ApiKeyProviderId, modelRuntime: ModelRuntime): Promise<boolean>;
|
|
6
8
|
export declare function runOpenCandleSetup(api: ExtensionAPI, ctx: ExtensionContext, options?: {
|
|
7
9
|
mode: SetupMode;
|
|
8
|
-
}): Promise<SetupResult>;
|
|
10
|
+
}, modelRuntime?: ModelRuntime): Promise<SetupResult>;
|
|
9
11
|
export {};
|