opencandle 0.2.0 → 0.4.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 +110 -87
- package/assets/logo.svg +187 -0
- package/dist/analysts/orchestrator.js +1 -2
- package/dist/analysts/orchestrator.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.js +38 -2
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +34 -5
- package/dist/config.js +29 -8
- package/dist/config.js.map +1 -1
- package/dist/infra/browser.d.ts +10 -0
- package/dist/infra/browser.js +1 -0
- package/dist/infra/browser.js.map +1 -1
- package/dist/infra/cache.d.ts +4 -0
- package/dist/infra/cache.js +4 -0
- package/dist/infra/cache.js.map +1 -1
- package/dist/infra/native-dependencies.d.ts +1 -0
- package/dist/infra/native-dependencies.js +10 -0
- package/dist/infra/native-dependencies.js.map +1 -0
- package/dist/infra/node-version.d.ts +2 -0
- package/dist/infra/node-version.js +23 -0
- package/dist/infra/node-version.js.map +1 -0
- package/dist/infra/rate-limiter.js +6 -0
- package/dist/infra/rate-limiter.js.map +1 -1
- package/dist/memory/index.d.ts +2 -0
- package/dist/memory/index.js +1 -0
- package/dist/memory/index.js.map +1 -1
- package/dist/memory/sqlite.js +42 -4
- package/dist/memory/sqlite.js.map +1 -1
- package/dist/memory/storage.d.ts +6 -0
- package/dist/memory/storage.js +3 -3
- package/dist/memory/storage.js.map +1 -1
- package/dist/memory/tool-defaults.d.ts +8 -0
- package/dist/memory/tool-defaults.js +59 -0
- package/dist/memory/tool-defaults.js.map +1 -0
- package/dist/onboarding/connect.d.ts +35 -0
- package/dist/onboarding/connect.js +118 -0
- package/dist/onboarding/connect.js.map +1 -0
- package/dist/onboarding/credential-interceptor.d.ts +44 -0
- package/dist/onboarding/credential-interceptor.js +72 -0
- package/dist/onboarding/credential-interceptor.js.map +1 -0
- package/dist/onboarding/degradation-accumulator.d.ts +21 -0
- package/dist/onboarding/degradation-accumulator.js +55 -0
- package/dist/onboarding/degradation-accumulator.js.map +1 -0
- package/dist/onboarding/prompt-user.d.ts +23 -0
- package/dist/onboarding/prompt-user.js +61 -0
- package/dist/onboarding/prompt-user.js.map +1 -0
- package/dist/onboarding/providers.d.ts +116 -0
- package/dist/onboarding/providers.js +239 -0
- package/dist/onboarding/providers.js.map +1 -0
- package/dist/onboarding/state.d.ts +31 -2
- package/dist/onboarding/state.js +141 -13
- package/dist/onboarding/state.js.map +1 -1
- package/dist/onboarding/tool-helpers.d.ts +34 -0
- package/dist/onboarding/tool-helpers.js +80 -0
- package/dist/onboarding/tool-helpers.js.map +1 -0
- package/dist/onboarding/tool-tags.d.ts +37 -0
- package/dist/onboarding/tool-tags.js +149 -0
- package/dist/onboarding/tool-tags.js.map +1 -0
- package/dist/onboarding/validation.d.ts +19 -0
- package/dist/onboarding/validation.js +117 -0
- package/dist/onboarding/validation.js.map +1 -0
- package/dist/pi/opencandle-extension.d.ts +7 -1
- package/dist/pi/opencandle-extension.js +488 -13
- package/dist/pi/opencandle-extension.js.map +1 -1
- package/dist/pi/session-storage.d.ts +2 -0
- package/dist/pi/session-storage.js +5 -0
- package/dist/pi/session-storage.js.map +1 -0
- package/dist/pi/session.d.ts +4 -1
- package/dist/pi/session.js +25 -3
- package/dist/pi/session.js.map +1 -1
- package/dist/pi/setup.d.ts +1 -2
- package/dist/pi/setup.js +67 -120
- package/dist/pi/setup.js.map +1 -1
- package/dist/pi/tool-adapter.d.ts +2 -2
- package/dist/pi/tool-adapter.js +14 -1
- package/dist/pi/tool-adapter.js.map +1 -1
- package/dist/prompts/context-builder.d.ts +22 -0
- package/dist/prompts/context-builder.js +47 -11
- package/dist/prompts/context-builder.js.map +1 -1
- package/dist/prompts/disclaimer.d.ts +6 -0
- package/dist/prompts/disclaimer.js +9 -0
- package/dist/prompts/disclaimer.js.map +1 -0
- package/dist/prompts/workflow-prompts.d.ts +8 -0
- package/dist/prompts/workflow-prompts.js +39 -5
- package/dist/prompts/workflow-prompts.js.map +1 -1
- package/dist/providers/alpha-vantage.js +20 -1
- package/dist/providers/alpha-vantage.js.map +1 -1
- package/dist/providers/exa-search.d.ts +39 -0
- package/dist/providers/exa-search.js +276 -0
- package/dist/providers/exa-search.js.map +1 -0
- package/dist/providers/finnhub.d.ts +17 -0
- package/dist/providers/finnhub.js +94 -0
- package/dist/providers/finnhub.js.map +1 -0
- package/dist/providers/fred.js +13 -1
- package/dist/providers/fred.js.map +1 -1
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.js +1 -0
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/provider-credential-error.d.ts +8 -0
- package/dist/providers/provider-credential-error.js +22 -0
- package/dist/providers/provider-credential-error.js.map +1 -0
- package/dist/providers/reddit.d.ts +8 -0
- package/dist/providers/reddit.js +36 -9
- package/dist/providers/reddit.js.map +1 -1
- package/dist/providers/twitter.js +2 -8
- package/dist/providers/twitter.js.map +1 -1
- package/dist/providers/web-search.d.ts +17 -0
- package/dist/providers/web-search.js +224 -0
- package/dist/providers/web-search.js.map +1 -0
- package/dist/providers/wrap-provider.d.ts +7 -0
- package/dist/providers/wrap-provider.js +15 -0
- package/dist/providers/wrap-provider.js.map +1 -1
- package/dist/providers/yahoo-finance.js +70 -33
- package/dist/providers/yahoo-finance.js.map +1 -1
- package/dist/routing/classify-intent.js +22 -0
- package/dist/routing/classify-intent.js.map +1 -1
- package/dist/routing/defaults.js +1 -1
- package/dist/routing/defaults.js.map +1 -1
- package/dist/routing/index.d.ts +4 -0
- package/dist/routing/index.js +3 -0
- package/dist/routing/index.js.map +1 -1
- package/dist/routing/router-llm-client.d.ts +11 -0
- package/dist/routing/router-llm-client.js +42 -0
- package/dist/routing/router-llm-client.js.map +1 -0
- package/dist/routing/router-prompt.d.ts +2 -0
- package/dist/routing/router-prompt.js +138 -0
- package/dist/routing/router-prompt.js.map +1 -0
- package/dist/routing/router-types.d.ts +62 -0
- package/dist/routing/router-types.js +2 -0
- package/dist/routing/router-types.js.map +1 -0
- package/dist/routing/router.d.ts +10 -0
- package/dist/routing/router.js +194 -0
- package/dist/routing/router.js.map +1 -0
- package/dist/runtime/session-coordinator.d.ts +63 -4
- package/dist/runtime/session-coordinator.js +155 -4
- package/dist/runtime/session-coordinator.js.map +1 -1
- package/dist/runtime/tool-defaults-wrapper.d.ts +3 -0
- package/dist/runtime/tool-defaults-wrapper.js +25 -0
- package/dist/runtime/tool-defaults-wrapper.js.map +1 -0
- package/dist/sentiment/adapters/finnhub.d.ts +7 -0
- package/dist/sentiment/adapters/finnhub.js +39 -0
- package/dist/sentiment/adapters/finnhub.js.map +1 -0
- package/dist/sentiment/adapters/reddit.d.ts +11 -0
- package/dist/sentiment/adapters/reddit.js +54 -0
- package/dist/sentiment/adapters/reddit.js.map +1 -0
- package/dist/sentiment/adapters/twitter.d.ts +9 -0
- package/dist/sentiment/adapters/twitter.js +32 -0
- package/dist/sentiment/adapters/twitter.js.map +1 -0
- package/dist/sentiment/adapters/web.d.ts +9 -0
- package/dist/sentiment/adapters/web.js +40 -0
- package/dist/sentiment/adapters/web.js.map +1 -0
- package/dist/sentiment/index.d.ts +16 -0
- package/dist/sentiment/index.js +44 -0
- package/dist/sentiment/index.js.map +1 -0
- package/dist/sentiment/keywords.d.ts +2 -0
- package/dist/sentiment/keywords.js +9 -0
- package/dist/sentiment/keywords.js.map +1 -0
- package/dist/sentiment/pipeline.d.ts +9 -0
- package/dist/sentiment/pipeline.js +57 -0
- package/dist/sentiment/pipeline.js.map +1 -0
- package/dist/sentiment/scorer.d.ts +9 -0
- package/dist/sentiment/scorer.js +64 -0
- package/dist/sentiment/scorer.js.map +1 -0
- package/dist/sentiment/store.d.ts +24 -0
- package/dist/sentiment/store.js +182 -0
- package/dist/sentiment/store.js.map +1 -0
- package/dist/sentiment/trends.d.ts +13 -0
- package/dist/sentiment/trends.js +73 -0
- package/dist/sentiment/trends.js.map +1 -0
- package/dist/sentiment/types.d.ts +66 -0
- package/dist/sentiment/types.js +54 -0
- package/dist/sentiment/types.js.map +1 -0
- package/dist/system-prompt.js +29 -13
- package/dist/system-prompt.js.map +1 -1
- package/dist/tool-kit.d.ts +4 -4
- package/dist/tools/fundamentals/company-overview.d.ts +4 -2
- package/dist/tools/fundamentals/company-overview.js +27 -27
- package/dist/tools/fundamentals/company-overview.js.map +1 -1
- package/dist/tools/fundamentals/comps.d.ts +1 -1
- package/dist/tools/fundamentals/comps.js +45 -45
- package/dist/tools/fundamentals/comps.js.map +1 -1
- package/dist/tools/fundamentals/dcf.d.ts +1 -1
- package/dist/tools/fundamentals/dcf.js +82 -82
- package/dist/tools/fundamentals/dcf.js.map +1 -1
- package/dist/tools/fundamentals/earnings.d.ts +4 -2
- package/dist/tools/fundamentals/earnings.js +25 -25
- package/dist/tools/fundamentals/earnings.js.map +1 -1
- package/dist/tools/fundamentals/financials.d.ts +4 -2
- package/dist/tools/fundamentals/financials.js +23 -23
- package/dist/tools/fundamentals/financials.js.map +1 -1
- package/dist/tools/fundamentals/sec-filings.d.ts +1 -1
- package/dist/tools/index.d.ts +28 -1
- package/dist/tools/index.js +35 -2
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/interaction/ask-user.d.ts +1 -1
- package/dist/tools/interaction/ask-user.js +28 -64
- package/dist/tools/interaction/ask-user.js.map +1 -1
- package/dist/tools/interaction/twitter-login.d.ts +1 -1
- package/dist/tools/macro/fear-greed.d.ts +1 -1
- package/dist/tools/macro/fred-data.d.ts +4 -2
- package/dist/tools/macro/fred-data.js +26 -26
- package/dist/tools/macro/fred-data.js.map +1 -1
- package/dist/tools/market/crypto-history.d.ts +1 -1
- package/dist/tools/market/crypto-price.d.ts +1 -1
- package/dist/tools/market/search-ticker.d.ts +1 -1
- package/dist/tools/market/stock-history.d.ts +1 -1
- package/dist/tools/market/stock-quote.d.ts +1 -1
- package/dist/tools/options/option-chain.d.ts +1 -1
- package/dist/tools/options/option-chain.js +4 -1
- package/dist/tools/options/option-chain.js.map +1 -1
- package/dist/tools/portfolio/correlation.d.ts +1 -1
- package/dist/tools/portfolio/predictions.d.ts +1 -1
- package/dist/tools/portfolio/risk-analysis.d.ts +1 -1
- package/dist/tools/portfolio/tracker.d.ts +1 -1
- package/dist/tools/portfolio/watchlist.d.ts +1 -1
- package/dist/tools/sentiment/reddit-sentiment.d.ts +4 -2
- package/dist/tools/sentiment/reddit-sentiment.js +107 -22
- package/dist/tools/sentiment/reddit-sentiment.js.map +1 -1
- package/dist/tools/sentiment/sentiment-summary.d.ts +7 -0
- package/dist/tools/sentiment/sentiment-summary.js +230 -0
- package/dist/tools/sentiment/sentiment-summary.js.map +1 -0
- package/dist/tools/sentiment/sentiment-trend.d.ts +22 -0
- package/dist/tools/sentiment/sentiment-trend.js +39 -0
- package/dist/tools/sentiment/sentiment-trend.js.map +1 -0
- package/dist/tools/sentiment/twitter-sentiment.d.ts +1 -1
- package/dist/tools/sentiment/twitter-sentiment.js +17 -0
- package/dist/tools/sentiment/twitter-sentiment.js.map +1 -1
- package/dist/tools/sentiment/web-search.d.ts +11 -0
- package/dist/tools/sentiment/web-search.js +115 -0
- package/dist/tools/sentiment/web-search.js.map +1 -0
- package/dist/tools/sentiment/web-sentiment.d.ts +8 -0
- package/dist/tools/sentiment/web-sentiment.js +66 -0
- package/dist/tools/sentiment/web-sentiment.js.map +1 -0
- package/dist/tools/technical/backtest.d.ts +1 -1
- package/dist/tools/technical/indicators.d.ts +1 -1
- package/dist/tools/technical/indicators.js +7 -1
- package/dist/tools/technical/indicators.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/sentiment.d.ts +21 -0
- package/dist/workflows/options-screener.js +7 -2
- package/dist/workflows/options-screener.js.map +1 -1
- package/dist/workflows/portfolio-builder.js +3 -3
- package/dist/workflows/portfolio-builder.js.map +1 -1
- package/gui/server/background-quotes.ts +31 -0
- package/gui/server/chat-event-adapter.ts +142 -0
- package/gui/server/invoke-tool.ts +89 -0
- package/gui/server/live-chat-event-adapter.ts +181 -0
- package/gui/server/model-setup.ts +100 -0
- package/gui/server/package.json +5 -0
- package/gui/server/projector.ts +212 -0
- package/gui/server/server.ts +592 -0
- package/gui/server/session-actions.ts +31 -0
- package/gui/server/tool-metadata.ts +88 -0
- package/gui/server/websocket.ts +128 -0
- package/gui/server/writer-lock.ts +118 -0
- package/gui/shared/chat-events.ts +118 -0
- package/gui/shared/event-reducer.ts +186 -0
- package/gui/web/dist/assets/CatalogOverlay-D1ImSJTe.js +1 -0
- package/gui/web/dist/assets/index-DBrWq43L.css +1 -0
- package/gui/web/dist/assets/index-RflHaj0y.js +67 -0
- package/gui/web/dist/assets/logo-CWpt6Y2a.svg +187 -0
- package/gui/web/dist/index.html +17 -0
- package/package.json +62 -20
- package/src/analysts/contracts.ts +189 -0
- package/src/analysts/orchestrator.ts +300 -0
- package/src/cli.ts +205 -0
- package/src/config.ts +161 -0
- package/src/index.ts +5 -0
- package/src/infra/browser.ts +111 -0
- package/src/infra/cache.ts +103 -0
- package/src/infra/http-client.ts +68 -0
- package/src/infra/index.ts +18 -0
- package/src/infra/native-dependencies.ts +12 -0
- package/src/infra/node-version.ts +24 -0
- package/src/infra/open-url.ts +28 -0
- package/src/infra/opencandle-paths.ts +64 -0
- package/src/infra/rate-limiter.ts +64 -0
- package/src/memory/index.ts +10 -0
- package/src/memory/manager.ts +159 -0
- package/src/memory/preference-extractor.ts +106 -0
- package/src/memory/retrieval.ts +70 -0
- package/src/memory/sqlite.ts +172 -0
- package/src/memory/storage.ts +204 -0
- package/src/memory/tool-defaults.ts +87 -0
- package/src/memory/types.ts +67 -0
- package/src/onboarding/connect.ts +184 -0
- package/src/onboarding/credential-interceptor.ts +134 -0
- package/src/onboarding/degradation-accumulator.ts +79 -0
- package/src/onboarding/prompt-user.ts +85 -0
- package/src/onboarding/providers.ts +315 -0
- package/src/onboarding/state.ts +218 -0
- package/src/onboarding/tool-helpers.ts +111 -0
- package/src/onboarding/tool-tags.ts +201 -0
- package/src/onboarding/validation.ts +158 -0
- package/src/pi/opencandle-extension.ts +724 -0
- package/src/pi/session-storage.ts +5 -0
- package/src/pi/session.ts +81 -0
- package/src/pi/setup.ts +371 -0
- package/src/pi/tool-adapter.ts +36 -0
- package/src/prompts/context-builder.ts +204 -0
- package/src/prompts/disclaimer.ts +9 -0
- package/src/prompts/sections.ts +46 -0
- package/src/prompts/workflow-prompts.ts +279 -0
- package/src/providers/alpha-vantage.ts +292 -0
- package/src/providers/coingecko.ts +96 -0
- package/src/providers/exa-search.ts +373 -0
- package/src/providers/fear-greed.ts +45 -0
- package/src/providers/finnhub.ts +124 -0
- package/src/providers/fred.ts +83 -0
- package/src/providers/index.ts +9 -0
- package/src/providers/provider-credential-error.ts +23 -0
- package/src/providers/reddit.ts +151 -0
- package/src/providers/sec-edgar.ts +96 -0
- package/src/providers/twitter.ts +173 -0
- package/src/providers/web-search.ts +293 -0
- package/src/providers/with-fallback.ts +41 -0
- package/src/providers/wrap-provider.ts +64 -0
- package/src/providers/yahoo-finance.ts +367 -0
- package/src/routing/classify-intent.ts +194 -0
- package/src/routing/defaults.ts +29 -0
- package/src/routing/entity-extractor.ts +140 -0
- package/src/routing/index.ts +26 -0
- package/src/routing/router-llm-client.ts +51 -0
- package/src/routing/router-prompt.ts +159 -0
- package/src/routing/router-types.ts +66 -0
- package/src/routing/router.ts +213 -0
- package/src/routing/slot-resolver.ts +152 -0
- package/src/routing/types.ts +63 -0
- package/src/runtime/evidence.ts +77 -0
- package/src/runtime/index.ts +55 -0
- package/src/runtime/prompt-step.ts +75 -0
- package/src/runtime/provider-ids.ts +15 -0
- package/src/runtime/provider-tracker.ts +40 -0
- package/src/runtime/run-context.ts +22 -0
- package/src/runtime/session-coordinator.ts +406 -0
- package/src/runtime/tool-defaults-wrapper.ts +35 -0
- package/src/runtime/validation.ts +214 -0
- package/src/runtime/workflow-events.ts +75 -0
- package/src/runtime/workflow-runner.ts +188 -0
- package/src/runtime/workflow-types.ts +102 -0
- package/src/sentiment/adapters/finnhub.ts +44 -0
- package/src/sentiment/adapters/reddit.ts +65 -0
- package/src/sentiment/adapters/twitter.ts +36 -0
- package/src/sentiment/adapters/web.ts +44 -0
- package/src/sentiment/index.ts +58 -0
- package/src/sentiment/keywords.ts +9 -0
- package/src/sentiment/pipeline.ts +68 -0
- package/src/sentiment/scorer.ts +78 -0
- package/src/sentiment/store.ts +260 -0
- package/src/sentiment/trends.ts +90 -0
- package/src/sentiment/types.ts +108 -0
- package/src/system-prompt.ts +115 -0
- package/src/tool-kit.ts +68 -0
- package/src/tools/AGENTS.md +36 -0
- package/src/tools/fundamentals/company-overview.ts +54 -0
- package/src/tools/fundamentals/comps.ts +156 -0
- package/src/tools/fundamentals/dcf.ts +267 -0
- package/src/tools/fundamentals/earnings.ts +47 -0
- package/src/tools/fundamentals/financials.ts +54 -0
- package/src/tools/fundamentals/sec-filings.ts +61 -0
- package/src/tools/index.ts +88 -0
- package/src/tools/interaction/ask-user.ts +81 -0
- package/src/tools/interaction/twitter-login.ts +93 -0
- package/src/tools/macro/fear-greed.ts +41 -0
- package/src/tools/macro/fred-data.ts +54 -0
- package/src/tools/market/crypto-history.ts +51 -0
- package/src/tools/market/crypto-price.ts +53 -0
- package/src/tools/market/search-ticker.ts +53 -0
- package/src/tools/market/stock-history.ts +79 -0
- package/src/tools/market/stock-quote.ts +64 -0
- package/src/tools/options/greeks.ts +82 -0
- package/src/tools/options/option-chain.ts +91 -0
- package/src/tools/portfolio/correlation.ts +162 -0
- package/src/tools/portfolio/predictions.ts +253 -0
- package/src/tools/portfolio/risk-analysis.ts +134 -0
- package/src/tools/portfolio/tracker.ts +147 -0
- package/src/tools/portfolio/watchlist.ts +153 -0
- package/src/tools/sentiment/reddit-sentiment.ts +164 -0
- package/src/tools/sentiment/sentiment-summary.ts +256 -0
- package/src/tools/sentiment/sentiment-trend.ts +58 -0
- package/src/tools/sentiment/twitter-sentiment.ts +96 -0
- package/src/tools/sentiment/web-search.ts +150 -0
- package/src/tools/sentiment/web-sentiment.ts +76 -0
- package/src/tools/technical/backtest.ts +246 -0
- package/src/tools/technical/indicators.ts +258 -0
- package/src/types/fundamentals.ts +46 -0
- package/src/types/index.ts +20 -0
- package/src/types/macro.ts +27 -0
- package/src/types/market.ts +43 -0
- package/src/types/options.ts +35 -0
- package/src/types/portfolio.ts +41 -0
- package/src/types/sentiment.ts +70 -0
- package/src/workflows/compare-assets.ts +39 -0
- package/src/workflows/index.ts +4 -0
- package/src/workflows/options-screener.ts +49 -0
- package/src/workflows/portfolio-builder.ts +52 -0
- package/src/workflows/types.ts +4 -0
- package/dist/tools/sentiment/news-sentiment.d.ts +0 -7
- package/dist/tools/sentiment/news-sentiment.js +0 -55
- package/dist/tools/sentiment/news-sentiment.js.map +0 -1
package/dist/config.d.ts
CHANGED
|
@@ -1,8 +1,25 @@
|
|
|
1
|
+
export interface SentimentConfig {
|
|
2
|
+
retentionDays: number;
|
|
3
|
+
defaultSubreddits: string[];
|
|
4
|
+
commentsPerPost: number;
|
|
5
|
+
divergenceThreshold: number;
|
|
6
|
+
}
|
|
7
|
+
export type RouterMode = "rules" | "llm";
|
|
1
8
|
export interface Config {
|
|
2
9
|
alphaVantageApiKey?: string;
|
|
3
10
|
fredApiKey?: string;
|
|
11
|
+
braveApiKey?: string;
|
|
12
|
+
exaApiKey?: string;
|
|
13
|
+
finnhubApiKey?: string;
|
|
4
14
|
/** Enable adversarial bull/bear debate in comprehensive analysis. Default: true. */
|
|
5
15
|
debate?: boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Intent-router rollout flag. `"rules"` (default) runs the legacy regex
|
|
18
|
+
* `classifyIntent` + `extractPreferences` path. `"llm"` runs the LLM router
|
|
19
|
+
* ahead of prompt assembly. Controlled by `OPENCANDLE_ROUTER_MODE`.
|
|
20
|
+
*/
|
|
21
|
+
routerMode: RouterMode;
|
|
22
|
+
sentiment?: SentimentConfig;
|
|
6
23
|
}
|
|
7
24
|
export interface OpenCandleFileConfig {
|
|
8
25
|
providers?: {
|
|
@@ -12,17 +29,29 @@ export interface OpenCandleFileConfig {
|
|
|
12
29
|
fred?: {
|
|
13
30
|
apiKey?: string;
|
|
14
31
|
};
|
|
32
|
+
brave?: {
|
|
33
|
+
apiKey?: string;
|
|
34
|
+
};
|
|
35
|
+
exa?: {
|
|
36
|
+
apiKey?: string;
|
|
37
|
+
};
|
|
38
|
+
finnhub?: {
|
|
39
|
+
apiKey?: string;
|
|
40
|
+
};
|
|
15
41
|
};
|
|
16
42
|
/** Enable adversarial bull/bear debate in comprehensive analysis. Default: true. */
|
|
17
43
|
debate?: boolean;
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
44
|
+
sentiment?: {
|
|
45
|
+
retentionDays?: number;
|
|
46
|
+
defaultSubreddits?: string[];
|
|
47
|
+
commentsPerPost?: number;
|
|
48
|
+
divergenceThreshold?: number;
|
|
49
|
+
};
|
|
22
50
|
}
|
|
23
51
|
export declare function loadEnv(path?: string): void;
|
|
24
52
|
export declare function loadFileConfig(path?: string): OpenCandleFileConfig;
|
|
25
53
|
export declare function saveFileConfig(config: OpenCandleFileConfig, path?: string): void;
|
|
26
|
-
export declare function getFinanceProviderReadiness(path?: string): FinanceProviderReadiness;
|
|
27
54
|
export declare function loadConfig(): Config;
|
|
28
55
|
export declare function getConfig(): Config;
|
|
56
|
+
/** Test-only: clear the memoized config so the next `getConfig()` re-reads env. */
|
|
57
|
+
export declare function resetConfigCache(): void;
|
package/dist/config.js
CHANGED
|
@@ -23,12 +23,37 @@ export function loadEnv(path = ".env") {
|
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
let cachedConfig = null;
|
|
26
|
+
const SENTIMENT_DEFAULTS = {
|
|
27
|
+
retentionDays: 30,
|
|
28
|
+
defaultSubreddits: ["wallstreetbets", "stocks", "investing", "options"],
|
|
29
|
+
commentsPerPost: 5,
|
|
30
|
+
divergenceThreshold: 0.4,
|
|
31
|
+
};
|
|
32
|
+
function resolveRouterMode() {
|
|
33
|
+
const raw = process.env.OPENCANDLE_ROUTER_MODE;
|
|
34
|
+
if (raw === undefined || raw === "")
|
|
35
|
+
return "rules";
|
|
36
|
+
if (raw === "rules" || raw === "llm")
|
|
37
|
+
return raw;
|
|
38
|
+
throw new Error(`Invalid OPENCANDLE_ROUTER_MODE="${raw}". Allowed values: "rules" (default) or "llm".`);
|
|
39
|
+
}
|
|
26
40
|
function resolveConfig(fileConfig) {
|
|
27
41
|
const debateEnv = process.env.OPENCANDLE_DEBATE;
|
|
42
|
+
const fileSentiment = fileConfig.sentiment;
|
|
28
43
|
return {
|
|
29
44
|
alphaVantageApiKey: process.env.ALPHA_VANTAGE_API_KEY ?? fileConfig.providers?.alphaVantage?.apiKey,
|
|
30
45
|
fredApiKey: process.env.FRED_API_KEY ?? fileConfig.providers?.fred?.apiKey,
|
|
46
|
+
braveApiKey: process.env.BRAVE_API_KEY ?? fileConfig.providers?.brave?.apiKey,
|
|
47
|
+
exaApiKey: process.env.EXA_API_KEY ?? fileConfig.providers?.exa?.apiKey,
|
|
48
|
+
finnhubApiKey: process.env.FINNHUB_API_KEY ?? fileConfig.providers?.finnhub?.apiKey,
|
|
31
49
|
debate: debateEnv !== undefined ? debateEnv !== "false" && debateEnv !== "0" : fileConfig.debate ?? true,
|
|
50
|
+
routerMode: resolveRouterMode(),
|
|
51
|
+
sentiment: {
|
|
52
|
+
retentionDays: fileSentiment?.retentionDays ?? SENTIMENT_DEFAULTS.retentionDays,
|
|
53
|
+
defaultSubreddits: fileSentiment?.defaultSubreddits ?? SENTIMENT_DEFAULTS.defaultSubreddits,
|
|
54
|
+
commentsPerPost: fileSentiment?.commentsPerPost ?? SENTIMENT_DEFAULTS.commentsPerPost,
|
|
55
|
+
divergenceThreshold: fileSentiment?.divergenceThreshold ?? SENTIMENT_DEFAULTS.divergenceThreshold,
|
|
56
|
+
},
|
|
32
57
|
};
|
|
33
58
|
}
|
|
34
59
|
export function loadFileConfig(path = getConfigPath()) {
|
|
@@ -56,14 +81,6 @@ export function saveFileConfig(config, path = getConfigPath()) {
|
|
|
56
81
|
ensureParentDir(path);
|
|
57
82
|
writeFileSync(path, `${JSON.stringify(config, null, 2)}\n`, "utf-8");
|
|
58
83
|
}
|
|
59
|
-
export function getFinanceProviderReadiness(path = getConfigPath()) {
|
|
60
|
-
loadEnv();
|
|
61
|
-
const config = resolveConfig(loadFileConfig(path));
|
|
62
|
-
return {
|
|
63
|
-
hasAlphaVantage: Boolean(config.alphaVantageApiKey),
|
|
64
|
-
hasFred: Boolean(config.fredApiKey),
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
84
|
export function loadConfig() {
|
|
68
85
|
loadEnv();
|
|
69
86
|
cachedConfig = resolveConfig(loadFileConfig());
|
|
@@ -75,4 +92,8 @@ export function getConfig() {
|
|
|
75
92
|
}
|
|
76
93
|
return cachedConfig;
|
|
77
94
|
}
|
|
95
|
+
/** Test-only: clear the memoized config so the next `getConfig()` re-reads env. */
|
|
96
|
+
export function resetConfigCache() {
|
|
97
|
+
cachedConfig = null;
|
|
98
|
+
}
|
|
78
99
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
|
package/dist/infra/browser.d.ts
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared stealth browser infrastructure using Camoufox (anti-detection Firefox).
|
|
3
|
+
* Provides a singleton browser instance that any tool can use for scraping.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
* import { StealthBrowser } from "../infra/browser.js";
|
|
7
|
+
* const data = await StealthBrowser.fetchJson<MyType>(url);
|
|
8
|
+
* const result = await StealthBrowser.evaluate(url, () => document.title);
|
|
9
|
+
*/
|
|
10
|
+
import "./node-version.js";
|
|
1
11
|
import type { Page } from "playwright-core";
|
|
2
12
|
export declare const StealthBrowser: {
|
|
3
13
|
/**
|
package/dist/infra/browser.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/infra/browser.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/infra/browser.ts"],"names":[],"mappings":"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"}
|
package/dist/infra/cache.d.ts
CHANGED
|
@@ -37,6 +37,8 @@ export declare const TTL: {
|
|
|
37
37
|
readonly SENTIMENT: 300000;
|
|
38
38
|
readonly OPTIONS_CHAIN: 120000;
|
|
39
39
|
readonly CRUMB: 900000;
|
|
40
|
+
readonly WEB_SEARCH: 300000;
|
|
41
|
+
readonly FINNHUB_NEWS: 300000;
|
|
40
42
|
};
|
|
41
43
|
export declare const STALE_LIMIT: {
|
|
42
44
|
readonly QUOTE: number;
|
|
@@ -45,4 +47,6 @@ export declare const STALE_LIMIT: {
|
|
|
45
47
|
readonly MACRO: number;
|
|
46
48
|
readonly SENTIMENT: 3600000;
|
|
47
49
|
readonly OPTIONS_CHAIN: number;
|
|
50
|
+
readonly WEB_SEARCH: 3600000;
|
|
51
|
+
readonly FINNHUB_NEWS: 3600000;
|
|
48
52
|
};
|
package/dist/infra/cache.js
CHANGED
|
@@ -66,6 +66,8 @@ export const TTL = {
|
|
|
66
66
|
SENTIMENT: 300_000, // 5 minutes
|
|
67
67
|
OPTIONS_CHAIN: 120_000, // 2 minutes
|
|
68
68
|
CRUMB: 900_000, // 15 minutes
|
|
69
|
+
WEB_SEARCH: 300_000, // 5 minutes
|
|
70
|
+
FINNHUB_NEWS: 300_000, // 5 minutes
|
|
69
71
|
};
|
|
70
72
|
// Stale limits — how long past TTL expiry a cached value is still useful as fallback
|
|
71
73
|
export const STALE_LIMIT = {
|
|
@@ -75,5 +77,7 @@ export const STALE_LIMIT = {
|
|
|
75
77
|
MACRO: 24 * 3_600_000, // 24 hours
|
|
76
78
|
SENTIMENT: 3_600_000, // 1 hour
|
|
77
79
|
OPTIONS_CHAIN: 30 * 60_000, // 30 minutes
|
|
80
|
+
WEB_SEARCH: 3_600_000, // 1 hour
|
|
81
|
+
FINNHUB_NEWS: 3_600_000, // 1 hour
|
|
78
82
|
};
|
|
79
83
|
//# sourceMappingURL=cache.js.map
|
package/dist/infra/cache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/infra/cache.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,KAAK;IACR,KAAK,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC/C,YAAY,GAAG,KAAK,CAAC;IACrB,iBAAiB,GAAG,CAAC,CAAC;IAE9B,GAAG,CAAI,GAAW;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS;YAAE,OAAO,SAAS,CAAC;QACnD,OAAO,KAAK,CAAC,KAAU,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACH,QAAQ,CAAI,GAAW,EAAE,YAAoB;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAE7B,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,QAAQ,GAAG,YAAY,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvB,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC,QAAQ,CAAC;QACxC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAU,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;IAC5E,CAAC;IAED;;;;OAIG;IACH,gBAAgB;QACd,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,QAAQ,EAAE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC9E,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,iBAAiB,GAAG,CAAC,CAAC;QAC3B,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,GAAG,CAAI,GAAW,EAAE,KAAQ,EAAE,KAAa;QACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,UAAU,CAAC,OAAe;QACxB,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;IACzB,CAAC;CACF;AAED,wBAAwB;AACxB,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;AAEjC,eAAe;AACf,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,KAAK,EAAE,MAAM,EAAU,WAAW;IAClC,OAAO,EAAE,SAAS,EAAK,SAAS;IAChC,YAAY,EAAE,UAAU,EAAE,WAAW;IACrC,KAAK,EAAE,SAAS,EAAO,SAAS;IAChC,SAAS,EAAE,OAAO,EAAK,YAAY;IACnC,aAAa,EAAE,OAAO,EAAE,YAAY;IACpC,KAAK,EAAE,OAAO,EAAS,aAAa;
|
|
1
|
+
{"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/infra/cache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getNativeDependencyErrorMessage(error: unknown, dependencyName: string): string | null;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export function getNativeDependencyErrorMessage(error, dependencyName) {
|
|
2
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
3
|
+
if (!message.includes("NODE_MODULE_VERSION") &&
|
|
4
|
+
!message.includes("was compiled against a different Node.js version")) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
return `${dependencyName} native binding was built for a different Node ABI than the active Node ${process.versions.node}. ` +
|
|
8
|
+
`Run \`npm rebuild ${dependencyName}\` or reinstall dependencies under the active Node with \`npm install\`.`;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=native-dependencies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-dependencies.js","sourceRoot":"","sources":["../../src/infra/native-dependencies.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,+BAA+B,CAAC,KAAc,EAAE,cAAsB;IACpF,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,IACE,CAAC,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACxC,CAAC,OAAO,CAAC,QAAQ,CAAC,kDAAkD,CAAC,EACrE,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,GAAG,cAAc,2EAA2E,OAAO,CAAC,QAAQ,CAAC,IAAI,IAAI;QAC1H,qBAAqB,cAAc,0EAA0E,CAAC;AAClH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
const SUPPORTED_NODE_RANGE = "20.19+, 22.12+, or 24.x-26.x";
|
|
2
|
+
function isSupportedNodeVersion(version) {
|
|
3
|
+
const [majorRaw, minorRaw] = version.split(".");
|
|
4
|
+
const major = Number(majorRaw);
|
|
5
|
+
const minor = Number(minorRaw);
|
|
6
|
+
if (major === 20)
|
|
7
|
+
return minor >= 19;
|
|
8
|
+
if (major === 22)
|
|
9
|
+
return minor >= 12;
|
|
10
|
+
return major >= 24 && major < 27;
|
|
11
|
+
}
|
|
12
|
+
export function getUnsupportedNodeVersionMessage(version = process.versions.node) {
|
|
13
|
+
if (isSupportedNodeVersion(version))
|
|
14
|
+
return null;
|
|
15
|
+
return `OpenCandle supports Node ${SUPPORTED_NODE_RANGE}. Current Node is ${version}. Use Node ${SUPPORTED_NODE_RANGE}; the repo default is Node 22.22.0 via \`nvm use\`. After switching Node versions, reinstall dependencies under the active Node with \`npm install\` or rebuild native modules with \`npm rebuild better-sqlite3\`.`;
|
|
16
|
+
}
|
|
17
|
+
export function assertSupportedNodeVersion(version) {
|
|
18
|
+
const message = getUnsupportedNodeVersionMessage(version);
|
|
19
|
+
if (message)
|
|
20
|
+
throw new Error(message);
|
|
21
|
+
}
|
|
22
|
+
assertSupportedNodeVersion();
|
|
23
|
+
//# sourceMappingURL=node-version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-version.js","sourceRoot":"","sources":["../../src/infra/node-version.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG,8BAA8B,CAAC;AAE5D,SAAS,sBAAsB,CAAC,OAAe;IAC7C,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAE/B,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,KAAK,IAAI,EAAE,CAAC;IACrC,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,KAAK,IAAI,EAAE,CAAC;IACrC,OAAO,KAAK,IAAI,EAAE,IAAI,KAAK,GAAG,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,gCAAgC,CAAC,UAAkB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACtF,IAAI,sBAAsB,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,OAAO,4BAA4B,oBAAoB,qBAAqB,OAAO,cAAc,oBAAoB,qNAAqN,CAAC;AAC7U,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAAgB;IACzD,MAAM,OAAO,GAAG,gCAAgC,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,0BAA0B,EAAE,CAAC"}
|
|
@@ -36,4 +36,10 @@ rateLimiter.configure("coingecko", 10, 0.167); // 10 req/min
|
|
|
36
36
|
rateLimiter.configure("alphavantage", 5, 0.083); // 5 req/min (free tier)
|
|
37
37
|
rateLimiter.configure("fred", 120, 2); // 120 req/min
|
|
38
38
|
rateLimiter.configure("twitter", 5, 0.167); // 5 req, ~10 req/min
|
|
39
|
+
rateLimiter.configure("reddit", 5, 0.167); // 5 req, ~10 req/min
|
|
40
|
+
rateLimiter.configure("reddit_comments", 10, 0.5); // 10 req, ~30 req/min
|
|
41
|
+
rateLimiter.configure("ddg", 3, 0.1); // 3 req, ~6 req/min
|
|
42
|
+
rateLimiter.configure("brave_search", 5, 0.083); // 5 req, ~5 req/min
|
|
43
|
+
rateLimiter.configure("exa", 5, 0.1); // 5 req, ~6 req/min
|
|
44
|
+
rateLimiter.configure("finnhub", 60, 1); // 60 req/min (free tier)
|
|
39
45
|
//# sourceMappingURL=rate-limiter.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/infra/rate-limiter.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,WAAW;IACd,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,SAAS,CAAC,QAAgB,EAAE,SAAiB,EAAE,UAAkB;QAC/D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;YACzB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,MAAM,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE;SAClC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAgB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,sBAAsB;QAE3C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEpB,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QAED,kCAAkC;QAClC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QACvE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,MAAc;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QACjD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACtB,MAAM,CAAC,MAAM,CAAC,SAAS,EACvB,MAAM,CAAC,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CACnD,CAAC;QACF,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;IAC1B,CAAC;CACF;AAED,+CAA+C;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAC7C,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAW,UAAU;AAC1D,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAE,aAAa;AAC7D,WAAW,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,wBAAwB;AACzE,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAW,cAAc;AAC/D,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAM,qBAAqB"}
|
|
1
|
+
{"version":3,"file":"rate-limiter.js","sourceRoot":"","sources":["../../src/infra/rate-limiter.ts"],"names":[],"mappings":"AAWA,MAAM,OAAO,WAAW;IACd,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE5C,SAAS,CAAC,QAAgB,EAAE,SAAiB,EAAE,UAAkB;QAC/D,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE;YACzB,MAAM,EAAE,SAAS;YACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE;YACtB,MAAM,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE;SAClC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAgB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,sBAAsB;QAE3C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAEpB,IAAI,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;YACnB,OAAO;QACT,CAAC;QAED,kCAAkC;QAClC,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QACvE,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACpB,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;IACrB,CAAC;IAEO,MAAM,CAAC,MAAc;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;QACjD,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CACtB,MAAM,CAAC,MAAM,CAAC,SAAS,EACvB,MAAM,CAAC,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CACnD,CAAC;QACF,MAAM,CAAC,UAAU,GAAG,GAAG,CAAC;IAC1B,CAAC;CACF;AAED,+CAA+C;AAC/C,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAC7C,WAAW,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAW,UAAU;AAC1D,WAAW,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAE,aAAa;AAC7D,WAAW,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,wBAAwB;AACzE,WAAW,CAAC,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAW,cAAc;AAC/D,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAM,qBAAqB;AACtE,WAAW,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAU,qBAAqB;AACzE,WAAW,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,sBAAsB;AACzE,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAa,oBAAoB;AACtE,WAAW,CAAC,SAAS,CAAC,cAAc,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,CAAE,oBAAoB;AACtE,WAAW,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC,CAAc,oBAAoB;AACvE,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAY,yBAAyB"}
|
package/dist/memory/index.d.ts
CHANGED
|
@@ -4,5 +4,7 @@ export type { WorkflowPreferences } from "./storage.js";
|
|
|
4
4
|
export { buildMemoryContext } from "./retrieval.js";
|
|
5
5
|
export { extractPreferences } from "./preference-extractor.js";
|
|
6
6
|
export { MemoryManager } from "./manager.js";
|
|
7
|
+
export { getAllDefaults, getDefaults, setDefault, clearDefault } from "./tool-defaults.js";
|
|
8
|
+
export type { ToolDefaults } from "./tool-defaults.js";
|
|
7
9
|
export type { MemoryCategory, MemoryEntry } from "./types.js";
|
|
8
10
|
export { isStale, STALENESS_THRESHOLDS, NEVER_TRUST_FROM_MEMORY } from "./types.js";
|
package/dist/memory/index.js
CHANGED
|
@@ -3,5 +3,6 @@ export { MemoryStorage } from "./storage.js";
|
|
|
3
3
|
export { buildMemoryContext } from "./retrieval.js";
|
|
4
4
|
export { extractPreferences } from "./preference-extractor.js";
|
|
5
5
|
export { MemoryManager } from "./manager.js";
|
|
6
|
+
export { getAllDefaults, getDefaults, setDefault, clearDefault } from "./tool-defaults.js";
|
|
6
7
|
export { isStale, STALENESS_THRESHOLDS, NEVER_TRUST_FROM_MEMORY } from "./types.js";
|
|
7
8
|
//# sourceMappingURL=index.js.map
|
package/dist/memory/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/memory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG3F,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC"}
|
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 { getStateDbPath } from "../infra/opencandle-paths.js";
|
|
5
|
-
const CURRENT_SCHEMA_VERSION =
|
|
5
|
+
const CURRENT_SCHEMA_VERSION = 4;
|
|
6
6
|
const CURRENT_SCHEMA = `
|
|
7
7
|
CREATE TABLE IF NOT EXISTS schema_version (
|
|
8
8
|
version INTEGER NOT NULL
|
|
@@ -28,7 +28,8 @@ const CURRENT_SCHEMA = `
|
|
|
28
28
|
resolved_slots_json TEXT,
|
|
29
29
|
defaults_used_json TEXT,
|
|
30
30
|
output_summary TEXT,
|
|
31
|
-
created_at TEXT NOT NULL
|
|
31
|
+
created_at TEXT NOT NULL,
|
|
32
|
+
turn_type TEXT NOT NULL DEFAULT 'workflow'
|
|
32
33
|
);
|
|
33
34
|
|
|
34
35
|
CREATE TABLE IF NOT EXISTS recommendations (
|
|
@@ -51,6 +52,14 @@ const CURRENT_SCHEMA = `
|
|
|
51
52
|
);
|
|
52
53
|
|
|
53
54
|
CREATE INDEX IF NOT EXISTS idx_workflow_events_run_id ON workflow_events(run_id);
|
|
55
|
+
|
|
56
|
+
CREATE TABLE IF NOT EXISTS tool_defaults (
|
|
57
|
+
tool_name TEXT NOT NULL,
|
|
58
|
+
param_path TEXT NOT NULL,
|
|
59
|
+
value_json TEXT NOT NULL,
|
|
60
|
+
set_at TEXT NOT NULL,
|
|
61
|
+
PRIMARY KEY (tool_name, param_path)
|
|
62
|
+
);
|
|
54
63
|
`;
|
|
55
64
|
export function initDatabase(path) {
|
|
56
65
|
if (path !== ":memory:") {
|
|
@@ -67,11 +76,39 @@ export function initDefaultDatabase() {
|
|
|
67
76
|
}
|
|
68
77
|
function ensureCurrentSchema(db) {
|
|
69
78
|
const currentVersion = readSchemaVersion(db);
|
|
70
|
-
if (currentVersion
|
|
71
|
-
|
|
79
|
+
if (currentVersion === CURRENT_SCHEMA_VERSION) {
|
|
80
|
+
// Up to date — still run CREATE TABLE IF NOT EXISTS for any missing auxiliary
|
|
81
|
+
// tables (e.g. workflow_events added out-of-band).
|
|
82
|
+
db.exec(CURRENT_SCHEMA);
|
|
72
83
|
return;
|
|
73
84
|
}
|
|
85
|
+
if (currentVersion === 3) {
|
|
86
|
+
migrateV3ToV4(db);
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
// Additive v2 → v3 → v4 migration without dropping data.
|
|
90
|
+
if (currentVersion === 2) {
|
|
91
|
+
migrateV2ToV3(db);
|
|
92
|
+
migrateV3ToV4(db);
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
// Any other mismatch (null first-run, or a foreign schema): reset.
|
|
96
|
+
resetSchema(db);
|
|
97
|
+
}
|
|
98
|
+
function migrateV2ToV3(db) {
|
|
99
|
+
const cols = db.pragma("table_info(workflow_runs)").map((c) => c.name);
|
|
100
|
+
if (!cols.includes("turn_type")) {
|
|
101
|
+
db.exec(`ALTER TABLE workflow_runs ADD COLUMN turn_type TEXT NOT NULL DEFAULT 'workflow'`);
|
|
102
|
+
}
|
|
103
|
+
// Ensure any tables or indexes added between versions are present.
|
|
74
104
|
db.exec(CURRENT_SCHEMA);
|
|
105
|
+
db.prepare("DELETE FROM schema_version").run();
|
|
106
|
+
db.prepare("INSERT INTO schema_version (version) VALUES (?)").run(3);
|
|
107
|
+
}
|
|
108
|
+
function migrateV3ToV4(db) {
|
|
109
|
+
db.exec(CURRENT_SCHEMA);
|
|
110
|
+
db.prepare("DELETE FROM schema_version").run();
|
|
111
|
+
db.prepare("INSERT INTO schema_version (version) VALUES (?)").run(CURRENT_SCHEMA_VERSION);
|
|
75
112
|
}
|
|
76
113
|
function readSchemaVersion(db) {
|
|
77
114
|
const table = db
|
|
@@ -88,6 +125,7 @@ function resetSchema(db) {
|
|
|
88
125
|
DROP TABLE IF EXISTS recommendations;
|
|
89
126
|
DROP TABLE IF EXISTS workflow_runs;
|
|
90
127
|
DROP TABLE IF EXISTS user_preferences;
|
|
128
|
+
DROP TABLE IF EXISTS tool_defaults;
|
|
91
129
|
DROP TABLE IF EXISTS schema_version;
|
|
92
130
|
`);
|
|
93
131
|
db.exec(CURRENT_SCHEMA);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAE9D,MAAM,sBAAsB,GAAG,CAAC,CAAC;AAEjC,MAAM,cAAc,GAAG
|
|
1
|
+
{"version":3,"file":"sqlite.js","sourceRoot":"","sources":["../../src/memory/sqlite.ts"],"names":[],"mappings":"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"}
|
package/dist/memory/storage.d.ts
CHANGED
|
@@ -24,6 +24,12 @@ interface WorkflowRunInput {
|
|
|
24
24
|
resolvedSlotsJson: string;
|
|
25
25
|
defaultsUsedJson: string;
|
|
26
26
|
outputSummary?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Router route verbatim. One of `"workflow"` or `"fallback"`. Defaults to
|
|
29
|
+
* `"workflow"` at the schema layer so legacy callers (rules-mode cascade)
|
|
30
|
+
* don't need to pass anything. Router-mode callers MUST pass this explicitly.
|
|
31
|
+
*/
|
|
32
|
+
turnType?: "workflow" | "fallback";
|
|
27
33
|
}
|
|
28
34
|
interface RecommendationInput {
|
|
29
35
|
workflowRunId: number;
|
package/dist/memory/storage.js
CHANGED
|
@@ -83,9 +83,9 @@ export class MemoryStorage {
|
|
|
83
83
|
insertWorkflowRun(input) {
|
|
84
84
|
const now = new Date().toISOString();
|
|
85
85
|
const result = this.db
|
|
86
|
-
.prepare(`INSERT INTO workflow_runs (session_id, workflow_type, input_slots_json, resolved_slots_json, defaults_used_json, output_summary, created_at)
|
|
87
|
-
VALUES (?, ?, ?, ?, ?, ?, ?)`)
|
|
88
|
-
.run(input.sessionId, input.workflowType, input.inputSlotsJson, input.resolvedSlotsJson, input.defaultsUsedJson, input.outputSummary ?? null, now);
|
|
86
|
+
.prepare(`INSERT INTO workflow_runs (session_id, workflow_type, input_slots_json, resolved_slots_json, defaults_used_json, output_summary, created_at, turn_type)
|
|
87
|
+
VALUES (?, ?, ?, ?, ?, ?, ?, ?)`)
|
|
88
|
+
.run(input.sessionId, input.workflowType, input.inputSlotsJson, input.resolvedSlotsJson, input.defaultsUsedJson, input.outputSummary ?? null, now, input.turnType ?? "workflow");
|
|
89
89
|
return Number(result.lastInsertRowid);
|
|
90
90
|
}
|
|
91
91
|
getRecentWorkflowRuns(limit) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/memory/storage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/memory/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { initDefaultDatabase } from "./sqlite.js";
|
|
2
|
+
export type ToolDefaults = Record<string, unknown>;
|
|
3
|
+
type SqliteDb = ReturnType<typeof initDefaultDatabase>;
|
|
4
|
+
export declare function getDefaults(toolName: string, db?: SqliteDb): ToolDefaults;
|
|
5
|
+
export declare function getAllDefaults(db?: SqliteDb): Map<string, ToolDefaults>;
|
|
6
|
+
export declare function setDefault(toolName: string, paramPath: string, value: unknown, db?: SqliteDb): void;
|
|
7
|
+
export declare function clearDefault(toolName: string, paramPath: string, db?: SqliteDb): void;
|
|
8
|
+
export {};
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { initDefaultDatabase } from "./sqlite.js";
|
|
2
|
+
export function getDefaults(toolName, db = initDefaultDatabase()) {
|
|
3
|
+
const rows = db
|
|
4
|
+
.prepare(`SELECT param_path, value_json FROM tool_defaults WHERE tool_name = ? ORDER BY param_path`)
|
|
5
|
+
.all(toolName);
|
|
6
|
+
const defaults = {};
|
|
7
|
+
for (const row of rows) {
|
|
8
|
+
setPath(defaults, row.param_path, parseStoredValue(row.value_json));
|
|
9
|
+
}
|
|
10
|
+
return defaults;
|
|
11
|
+
}
|
|
12
|
+
export function getAllDefaults(db = initDefaultDatabase()) {
|
|
13
|
+
const rows = db
|
|
14
|
+
.prepare(`SELECT tool_name, param_path, value_json FROM tool_defaults ORDER BY tool_name, param_path`)
|
|
15
|
+
.all();
|
|
16
|
+
const groups = new Map();
|
|
17
|
+
for (const row of rows) {
|
|
18
|
+
const defaults = groups.get(row.tool_name) ?? {};
|
|
19
|
+
setPath(defaults, row.param_path, parseStoredValue(row.value_json));
|
|
20
|
+
groups.set(row.tool_name, defaults);
|
|
21
|
+
}
|
|
22
|
+
return groups;
|
|
23
|
+
}
|
|
24
|
+
export function setDefault(toolName, paramPath, value, db = initDefaultDatabase()) {
|
|
25
|
+
db.prepare(`INSERT INTO tool_defaults (tool_name, param_path, value_json, set_at)
|
|
26
|
+
VALUES (?, ?, ?, ?)
|
|
27
|
+
ON CONFLICT(tool_name, param_path) DO UPDATE SET
|
|
28
|
+
value_json = excluded.value_json,
|
|
29
|
+
set_at = excluded.set_at`).run(toolName, paramPath, JSON.stringify(value), new Date().toISOString());
|
|
30
|
+
}
|
|
31
|
+
export function clearDefault(toolName, paramPath, db = initDefaultDatabase()) {
|
|
32
|
+
db.prepare(`DELETE FROM tool_defaults WHERE tool_name = ? AND param_path = ?`).run(toolName, paramPath);
|
|
33
|
+
}
|
|
34
|
+
function parseStoredValue(valueJson) {
|
|
35
|
+
try {
|
|
36
|
+
return JSON.parse(valueJson);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return valueJson;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function setPath(target, path, value) {
|
|
43
|
+
const parts = path.split(".").filter(Boolean);
|
|
44
|
+
if (parts.length === 0)
|
|
45
|
+
return;
|
|
46
|
+
let cursor = target;
|
|
47
|
+
for (const part of parts.slice(0, -1)) {
|
|
48
|
+
const existing = cursor[part];
|
|
49
|
+
if (!isPlainObject(existing)) {
|
|
50
|
+
cursor[part] = {};
|
|
51
|
+
}
|
|
52
|
+
cursor = cursor[part];
|
|
53
|
+
}
|
|
54
|
+
cursor[parts[parts.length - 1]] = value;
|
|
55
|
+
}
|
|
56
|
+
function isPlainObject(value) {
|
|
57
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=tool-defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-defaults.js","sourceRoot":"","sources":["../../src/memory/tool-defaults.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ExtensionContext } from "@earendil-works/pi-coding-agent";
|
|
2
|
+
import { type ProviderId } from "./providers.js";
|
|
3
|
+
export type ConnectResult = {
|
|
4
|
+
status: "connected";
|
|
5
|
+
} | {
|
|
6
|
+
status: "cancelled";
|
|
7
|
+
} | {
|
|
8
|
+
status: "blocked_by_env";
|
|
9
|
+
} | {
|
|
10
|
+
status: "invalid_key";
|
|
11
|
+
httpStatus?: number;
|
|
12
|
+
message?: string;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Persist an already-validated provider credential.
|
|
16
|
+
*
|
|
17
|
+
* Writes the key into `~/.opencandle/config.json` (preserving sibling fields),
|
|
18
|
+
* refreshes the cached `Config` so the next tool call sees the new value, and
|
|
19
|
+
* marks the provider as completed in the onboarding state.
|
|
20
|
+
*
|
|
21
|
+
* Shared by the TUI `/connect` flow (`runProviderConnect`) and the GUI
|
|
22
|
+
* provider-setup form. Validation is the caller's responsibility — both
|
|
23
|
+
* call sites run `validateCredential` before invoking this helper.
|
|
24
|
+
*/
|
|
25
|
+
export declare function persistProviderCredential(providerId: ProviderId, key: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Run the connect flow for a single provider.
|
|
28
|
+
*
|
|
29
|
+
* Env-precedence short-circuit: if the provider's configured credential
|
|
30
|
+
* already comes from an environment variable, the file-config write would
|
|
31
|
+
* be invisible to the next tool call (env vars win in `resolveConfig`).
|
|
32
|
+
* Notify the user explicitly and return `blocked_by_env` — do not open
|
|
33
|
+
* the browser or collect a pasted value.
|
|
34
|
+
*/
|
|
35
|
+
export declare function runProviderConnect(ctx: ExtensionContext, providerId: ProviderId): Promise<ConnectResult>;
|