opencandle 0.1.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.
Files changed (228) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +150 -0
  3. package/dist/analysts/orchestrator.d.ts +9 -0
  4. package/dist/analysts/orchestrator.js +100 -0
  5. package/dist/analysts/orchestrator.js.map +1 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +122 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/config.d.ts +24 -0
  10. package/dist/config.js +76 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/index.d.ts +5 -0
  13. package/dist/index.js +6 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/infra/browser.d.ts +27 -0
  16. package/dist/infra/browser.js +102 -0
  17. package/dist/infra/browser.js.map +1 -0
  18. package/dist/infra/cache.d.ts +18 -0
  19. package/dist/infra/cache.js +42 -0
  20. package/dist/infra/cache.js.map +1 -0
  21. package/dist/infra/http-client.d.ts +13 -0
  22. package/dist/infra/http-client.js +54 -0
  23. package/dist/infra/http-client.js.map +1 -0
  24. package/dist/infra/index.d.ts +5 -0
  25. package/dist/infra/index.js +6 -0
  26. package/dist/infra/index.js.map +1 -0
  27. package/dist/infra/open-url.d.ts +1 -0
  28. package/dist/infra/open-url.js +29 -0
  29. package/dist/infra/open-url.js.map +1 -0
  30. package/dist/infra/opencandle-paths.d.ts +11 -0
  31. package/dist/infra/opencandle-paths.js +48 -0
  32. package/dist/infra/opencandle-paths.js.map +1 -0
  33. package/dist/infra/rate-limiter.d.ts +7 -0
  34. package/dist/infra/rate-limiter.js +38 -0
  35. package/dist/infra/rate-limiter.js.map +1 -0
  36. package/dist/memory/index.d.ts +5 -0
  37. package/dist/memory/index.js +5 -0
  38. package/dist/memory/index.js.map +1 -0
  39. package/dist/memory/preference-extractor.d.ts +6 -0
  40. package/dist/memory/preference-extractor.js +88 -0
  41. package/dist/memory/preference-extractor.js.map +1 -0
  42. package/dist/memory/retrieval.d.ts +8 -0
  43. package/dist/memory/retrieval.js +61 -0
  44. package/dist/memory/retrieval.js.map +1 -0
  45. package/dist/memory/sqlite.d.ts +5 -0
  46. package/dist/memory/sqlite.js +95 -0
  47. package/dist/memory/sqlite.js.map +1 -0
  48. package/dist/memory/storage.d.ts +47 -0
  49. package/dist/memory/storage.js +124 -0
  50. package/dist/memory/storage.js.map +1 -0
  51. package/dist/onboarding/state.d.ts +8 -0
  52. package/dist/onboarding/state.js +31 -0
  53. package/dist/onboarding/state.js.map +1 -0
  54. package/dist/pi/opencandle-extension.d.ts +2 -0
  55. package/dist/pi/opencandle-extension.js +205 -0
  56. package/dist/pi/opencandle-extension.js.map +1 -0
  57. package/dist/pi/session.d.ts +10 -0
  58. package/dist/pi/session.js +28 -0
  59. package/dist/pi/session.js.map +1 -0
  60. package/dist/pi/setup.d.ts +10 -0
  61. package/dist/pi/setup.js +357 -0
  62. package/dist/pi/setup.js.map +1 -0
  63. package/dist/pi/tool-adapter.d.ts +5 -0
  64. package/dist/pi/tool-adapter.js +17 -0
  65. package/dist/pi/tool-adapter.js.map +1 -0
  66. package/dist/prompts/workflow-prompts.d.ts +9 -0
  67. package/dist/prompts/workflow-prompts.js +202 -0
  68. package/dist/prompts/workflow-prompts.js.map +1 -0
  69. package/dist/providers/alpha-vantage.d.ts +4 -0
  70. package/dist/providers/alpha-vantage.js +122 -0
  71. package/dist/providers/alpha-vantage.js.map +1 -0
  72. package/dist/providers/coingecko.d.ts +3 -0
  73. package/dist/providers/coingecko.js +53 -0
  74. package/dist/providers/coingecko.js.map +1 -0
  75. package/dist/providers/fear-greed.d.ts +2 -0
  76. package/dist/providers/fear-greed.js +26 -0
  77. package/dist/providers/fear-greed.js.map +1 -0
  78. package/dist/providers/fred.d.ts +2 -0
  79. package/dist/providers/fred.js +37 -0
  80. package/dist/providers/fred.js.map +1 -0
  81. package/dist/providers/index.d.ts +7 -0
  82. package/dist/providers/index.js +8 -0
  83. package/dist/providers/index.js.map +1 -0
  84. package/dist/providers/reddit.d.ts +9 -0
  85. package/dist/providers/reddit.js +69 -0
  86. package/dist/providers/reddit.js.map +1 -0
  87. package/dist/providers/sec-edgar.d.ts +9 -0
  88. package/dist/providers/sec-edgar.js +59 -0
  89. package/dist/providers/sec-edgar.js.map +1 -0
  90. package/dist/providers/yahoo-finance.d.ts +17 -0
  91. package/dist/providers/yahoo-finance.js +231 -0
  92. package/dist/providers/yahoo-finance.js.map +1 -0
  93. package/dist/routing/classify-intent.d.ts +2 -0
  94. package/dist/routing/classify-intent.js +147 -0
  95. package/dist/routing/classify-intent.js.map +1 -0
  96. package/dist/routing/defaults.d.ts +7 -0
  97. package/dist/routing/defaults.js +26 -0
  98. package/dist/routing/defaults.js.map +1 -0
  99. package/dist/routing/entity-extractor.d.ts +3 -0
  100. package/dist/routing/entity-extractor.js +130 -0
  101. package/dist/routing/entity-extractor.js.map +1 -0
  102. package/dist/routing/index.d.ts +5 -0
  103. package/dist/routing/index.js +5 -0
  104. package/dist/routing/index.js.map +1 -0
  105. package/dist/routing/slot-resolver.d.ts +15 -0
  106. package/dist/routing/slot-resolver.js +120 -0
  107. package/dist/routing/slot-resolver.js.map +1 -0
  108. package/dist/routing/types.d.ts +51 -0
  109. package/dist/routing/types.js +2 -0
  110. package/dist/routing/types.js.map +1 -0
  111. package/dist/system-prompt.d.ts +1 -0
  112. package/dist/system-prompt.js +49 -0
  113. package/dist/system-prompt.js.map +1 -0
  114. package/dist/tool-kit.d.ts +19 -0
  115. package/dist/tool-kit.js +20 -0
  116. package/dist/tool-kit.js.map +1 -0
  117. package/dist/tools/fundamentals/company-overview.d.ts +7 -0
  118. package/dist/tools/fundamentals/company-overview.js +40 -0
  119. package/dist/tools/fundamentals/company-overview.js.map +1 -0
  120. package/dist/tools/fundamentals/comps.d.ts +22 -0
  121. package/dist/tools/fundamentals/comps.js +110 -0
  122. package/dist/tools/fundamentals/comps.js.map +1 -0
  123. package/dist/tools/fundamentals/dcf.d.ts +46 -0
  124. package/dist/tools/fundamentals/dcf.js +184 -0
  125. package/dist/tools/fundamentals/dcf.js.map +1 -0
  126. package/dist/tools/fundamentals/earnings.d.ts +7 -0
  127. package/dist/tools/fundamentals/earnings.js +33 -0
  128. package/dist/tools/fundamentals/earnings.js.map +1 -0
  129. package/dist/tools/fundamentals/financials.d.ts +7 -0
  130. package/dist/tools/fundamentals/financials.js +37 -0
  131. package/dist/tools/fundamentals/financials.js.map +1 -0
  132. package/dist/tools/fundamentals/sec-filings.d.ts +8 -0
  133. package/dist/tools/fundamentals/sec-filings.js +40 -0
  134. package/dist/tools/fundamentals/sec-filings.js.map +1 -0
  135. package/dist/tools/index.d.ts +2 -0
  136. package/dist/tools/index.js +51 -0
  137. package/dist/tools/index.js.map +1 -0
  138. package/dist/tools/macro/fear-greed.d.ts +5 -0
  139. package/dist/tools/macro/fear-greed.js +26 -0
  140. package/dist/tools/macro/fear-greed.js.map +1 -0
  141. package/dist/tools/macro/fred-data.d.ts +8 -0
  142. package/dist/tools/macro/fred-data.js +34 -0
  143. package/dist/tools/macro/fred-data.js.map +1 -0
  144. package/dist/tools/market/crypto-history.d.ts +8 -0
  145. package/dist/tools/market/crypto-history.js +32 -0
  146. package/dist/tools/market/crypto-history.js.map +1 -0
  147. package/dist/tools/market/crypto-price.d.ts +7 -0
  148. package/dist/tools/market/crypto-price.js +42 -0
  149. package/dist/tools/market/crypto-price.js.map +1 -0
  150. package/dist/tools/market/search-ticker.d.ts +6 -0
  151. package/dist/tools/market/search-ticker.js +33 -0
  152. package/dist/tools/market/search-ticker.js.map +1 -0
  153. package/dist/tools/market/stock-history.d.ts +9 -0
  154. package/dist/tools/market/stock-history.js +35 -0
  155. package/dist/tools/market/stock-history.js.map +1 -0
  156. package/dist/tools/market/stock-quote.d.ts +7 -0
  157. package/dist/tools/market/stock-quote.js +32 -0
  158. package/dist/tools/market/stock-quote.js.map +1 -0
  159. package/dist/tools/options/greeks.d.ts +14 -0
  160. package/dist/tools/options/greeks.js +65 -0
  161. package/dist/tools/options/greeks.js.map +1 -0
  162. package/dist/tools/options/option-chain.d.ts +9 -0
  163. package/dist/tools/options/option-chain.js +61 -0
  164. package/dist/tools/options/option-chain.js.map +1 -0
  165. package/dist/tools/portfolio/correlation.d.ts +10 -0
  166. package/dist/tools/portfolio/correlation.js +122 -0
  167. package/dist/tools/portfolio/correlation.js.map +1 -0
  168. package/dist/tools/portfolio/predictions.d.ts +49 -0
  169. package/dist/tools/portfolio/predictions.js +171 -0
  170. package/dist/tools/portfolio/predictions.js.map +1 -0
  171. package/dist/tools/portfolio/risk-analysis.d.ts +12 -0
  172. package/dist/tools/portfolio/risk-analysis.js +113 -0
  173. package/dist/tools/portfolio/risk-analysis.js.map +1 -0
  174. package/dist/tools/portfolio/tracker.d.ts +10 -0
  175. package/dist/tools/portfolio/tracker.js +125 -0
  176. package/dist/tools/portfolio/tracker.js.map +1 -0
  177. package/dist/tools/portfolio/watchlist.d.ts +10 -0
  178. package/dist/tools/portfolio/watchlist.js +120 -0
  179. package/dist/tools/portfolio/watchlist.js.map +1 -0
  180. package/dist/tools/sentiment/news-sentiment.d.ts +7 -0
  181. package/dist/tools/sentiment/news-sentiment.js +57 -0
  182. package/dist/tools/sentiment/news-sentiment.js.map +1 -0
  183. package/dist/tools/sentiment/reddit-sentiment.d.ts +8 -0
  184. package/dist/tools/sentiment/reddit-sentiment.js +37 -0
  185. package/dist/tools/sentiment/reddit-sentiment.js.map +1 -0
  186. package/dist/tools/technical/backtest.d.ts +26 -0
  187. package/dist/tools/technical/backtest.js +190 -0
  188. package/dist/tools/technical/backtest.js.map +1 -0
  189. package/dist/tools/technical/indicators.d.ts +23 -0
  190. package/dist/tools/technical/indicators.js +212 -0
  191. package/dist/tools/technical/indicators.js.map +1 -0
  192. package/dist/types/fundamentals.d.ts +44 -0
  193. package/dist/types/fundamentals.js +2 -0
  194. package/dist/types/fundamentals.js.map +1 -0
  195. package/dist/types/index.d.ts +7 -0
  196. package/dist/types/index.js +2 -0
  197. package/dist/types/index.js.map +1 -0
  198. package/dist/types/macro.d.ts +24 -0
  199. package/dist/types/macro.js +14 -0
  200. package/dist/types/macro.js.map +1 -0
  201. package/dist/types/market.d.ts +41 -0
  202. package/dist/types/market.js +2 -0
  203. package/dist/types/market.js.map +1 -0
  204. package/dist/types/options.d.ts +33 -0
  205. package/dist/types/options.js +2 -0
  206. package/dist/types/options.js.map +1 -0
  207. package/dist/types/portfolio.d.ts +44 -0
  208. package/dist/types/portfolio.js +2 -0
  209. package/dist/types/portfolio.js.map +1 -0
  210. package/dist/types/sentiment.d.ts +24 -0
  211. package/dist/types/sentiment.js +2 -0
  212. package/dist/types/sentiment.js.map +1 -0
  213. package/dist/workflows/compare-assets.d.ts +3 -0
  214. package/dist/workflows/compare-assets.js +14 -0
  215. package/dist/workflows/compare-assets.js.map +1 -0
  216. package/dist/workflows/index.d.ts +4 -0
  217. package/dist/workflows/index.js +4 -0
  218. package/dist/workflows/index.js.map +1 -0
  219. package/dist/workflows/options-screener.d.ts +3 -0
  220. package/dist/workflows/options-screener.js +22 -0
  221. package/dist/workflows/options-screener.js.map +1 -0
  222. package/dist/workflows/portfolio-builder.d.ts +3 -0
  223. package/dist/workflows/portfolio-builder.js +26 -0
  224. package/dist/workflows/portfolio-builder.js.map +1 -0
  225. package/dist/workflows/types.d.ts +4 -0
  226. package/dist/workflows/types.js +2 -0
  227. package/dist/workflows/types.js.map +1 -0
  228. package/package.json +97 -0
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fundamentals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fundamentals.js","sourceRoot":"","sources":["../../src/types/fundamentals.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ export type { StockQuote, OHLCV, CryptoPrice } from "./market.js";
2
+ export type { CompanyOverview, EarningsData, FinancialStatement } from "./fundamentals.js";
3
+ export type { FredObservation, FredSeries } from "./macro.js";
4
+ export { FRED_SERIES } from "./macro.js";
5
+ export type { Greeks, OptionContract, OptionsChain } from "./options.js";
6
+ export type { Position, PortfolioSummary, RiskMetrics, TechnicalIndicators } from "./portfolio.js";
7
+ export type { FearGreedData, RedditSentimentResult } from "./sentiment.js";
@@ -0,0 +1,2 @@
1
+ export { FRED_SERIES } from "./macro.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,24 @@
1
+ export interface FredObservation {
2
+ date: string;
3
+ value: number;
4
+ }
5
+ export interface FredSeries {
6
+ id: string;
7
+ title: string;
8
+ observations: FredObservation[];
9
+ units: string;
10
+ frequency: string;
11
+ lastUpdated: string;
12
+ }
13
+ export declare const FRED_SERIES: {
14
+ readonly FED_FUNDS: "FEDFUNDS";
15
+ readonly TREASURY_10Y: "DGS10";
16
+ readonly TREASURY_2Y: "DGS2";
17
+ readonly TREASURY_30Y: "DGS30";
18
+ readonly CPI: "CPIAUCSL";
19
+ readonly UNEMPLOYMENT: "UNRATE";
20
+ readonly GDP: "GDP";
21
+ readonly YIELD_SPREAD_10Y2Y: "T10Y2Y";
22
+ readonly INFLATION_EXPECTATION: "T5YIE";
23
+ readonly MORTGAGE_30Y: "MORTGAGE30US";
24
+ };
@@ -0,0 +1,14 @@
1
+ // Common FRED series IDs
2
+ export const FRED_SERIES = {
3
+ FED_FUNDS: "FEDFUNDS",
4
+ TREASURY_10Y: "DGS10",
5
+ TREASURY_2Y: "DGS2",
6
+ TREASURY_30Y: "DGS30",
7
+ CPI: "CPIAUCSL",
8
+ UNEMPLOYMENT: "UNRATE",
9
+ GDP: "GDP",
10
+ YIELD_SPREAD_10Y2Y: "T10Y2Y",
11
+ INFLATION_EXPECTATION: "T5YIE",
12
+ MORTGAGE_30Y: "MORTGAGE30US",
13
+ };
14
+ //# sourceMappingURL=macro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"macro.js","sourceRoot":"","sources":["../../src/types/macro.ts"],"names":[],"mappings":"AAcA,yBAAyB;AACzB,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,SAAS,EAAE,UAAU;IACrB,YAAY,EAAE,OAAO;IACrB,WAAW,EAAE,MAAM;IACnB,YAAY,EAAE,OAAO;IACrB,GAAG,EAAE,UAAU;IACf,YAAY,EAAE,QAAQ;IACtB,GAAG,EAAE,KAAK;IACV,kBAAkB,EAAE,QAAQ;IAC5B,qBAAqB,EAAE,OAAO;IAC9B,YAAY,EAAE,cAAc;CACpB,CAAC"}
@@ -0,0 +1,41 @@
1
+ export interface StockQuote {
2
+ symbol: string;
3
+ price: number;
4
+ change: number;
5
+ changePercent: number;
6
+ open: number;
7
+ high: number;
8
+ low: number;
9
+ previousClose: number;
10
+ volume: number;
11
+ marketCap: number;
12
+ pe: number | null;
13
+ week52High: number;
14
+ week52Low: number;
15
+ timestamp: number;
16
+ }
17
+ export interface OHLCV {
18
+ date: string;
19
+ open: number;
20
+ high: number;
21
+ low: number;
22
+ close: number;
23
+ volume: number;
24
+ }
25
+ export interface CryptoPrice {
26
+ id: string;
27
+ symbol: string;
28
+ name: string;
29
+ price: number;
30
+ change24h: number;
31
+ changePercent24h: number;
32
+ marketCap: number;
33
+ volume24h: number;
34
+ high24h: number;
35
+ low24h: number;
36
+ ath: number;
37
+ athDate: string;
38
+ circulatingSupply: number;
39
+ totalSupply: number | null;
40
+ timestamp: number;
41
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=market.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market.js","sourceRoot":"","sources":["../../src/types/market.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ export interface Greeks {
2
+ delta: number;
3
+ gamma: number;
4
+ theta: number;
5
+ vega: number;
6
+ rho: number;
7
+ }
8
+ export interface OptionContract {
9
+ contractSymbol: string;
10
+ type: "call" | "put";
11
+ strike: number;
12
+ expiration: string;
13
+ bid: number;
14
+ ask: number;
15
+ lastPrice: number;
16
+ volume: number;
17
+ openInterest: number;
18
+ impliedVolatility: number;
19
+ inTheMoney: boolean;
20
+ greeks: Greeks;
21
+ }
22
+ export interface OptionsChain {
23
+ symbol: string;
24
+ underlyingPrice: number;
25
+ expirationDate: string;
26
+ expirationDates: string[];
27
+ calls: OptionContract[];
28
+ puts: OptionContract[];
29
+ totalCallVolume: number;
30
+ totalPutVolume: number;
31
+ putCallRatio: number;
32
+ fetchedAt: string;
33
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/types/options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,44 @@
1
+ export interface Position {
2
+ symbol: string;
3
+ shares: number;
4
+ avgCost: number;
5
+ addedAt: string;
6
+ }
7
+ export interface PortfolioSummary {
8
+ positions: Array<Position & {
9
+ currentPrice: number;
10
+ marketValue: number;
11
+ totalCost: number;
12
+ pnl: number;
13
+ pnlPercent: number;
14
+ }>;
15
+ totalValue: number;
16
+ totalCost: number;
17
+ totalPnl: number;
18
+ totalPnlPercent: number;
19
+ }
20
+ export interface RiskMetrics {
21
+ symbol: string;
22
+ annualizedReturn: number;
23
+ annualizedVolatility: number;
24
+ sharpeRatio: number;
25
+ maxDrawdown: number;
26
+ var95: number;
27
+ }
28
+ export interface TechnicalIndicators {
29
+ symbol: string;
30
+ period: string;
31
+ sma: number[];
32
+ ema: number[];
33
+ rsi: number[];
34
+ macd: {
35
+ macd: number;
36
+ signal: number;
37
+ histogram: number;
38
+ }[];
39
+ bollingerBands: {
40
+ upper: number;
41
+ middle: number;
42
+ lower: number;
43
+ }[];
44
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=portfolio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio.js","sourceRoot":"","sources":["../../src/types/portfolio.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ export interface FearGreedData {
2
+ value: number;
3
+ label: string;
4
+ timestamp: number;
5
+ previousClose: number;
6
+ weekAgo: number | null;
7
+ monthAgo: number | null;
8
+ }
9
+ export interface RedditSentimentResult {
10
+ subreddit: string;
11
+ postCount: number;
12
+ posts: Array<{
13
+ title: string;
14
+ score: number;
15
+ comments: number;
16
+ url: string;
17
+ created: string;
18
+ }>;
19
+ topMentions: string[];
20
+ sentimentScore: number;
21
+ bullishCount: number;
22
+ bearishCount: number;
23
+ fetchedAt: string;
24
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sentiment.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sentiment.js","sourceRoot":"","sources":["../../src/types/sentiment.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ import type { CompareAssetsSlots, SlotResolution } from "../routing/types.js";
2
+ import type { WorkflowPlan } from "./types.js";
3
+ export declare function buildCompareAssetsWorkflow(resolution: SlotResolution<CompareAssetsSlots>): WorkflowPlan;
@@ -0,0 +1,14 @@
1
+ import { buildCompareAssetsPrompt } from "../prompts/workflow-prompts.js";
2
+ export function buildCompareAssetsWorkflow(resolution) {
3
+ const symbols = resolution.resolved.symbols.join(", ");
4
+ return {
5
+ initialPrompt: buildCompareAssetsPrompt(resolution),
6
+ followUps: [
7
+ `Now present the side-by-side comparison for ${symbols}:
8
+ - Keep any unavailable fundamentals marked as unavailable instead of retrying the same failed provider calls.
9
+ - Use the price, technical, and risk data you already fetched to finish the comparison even if some fundamentals are missing.
10
+ - End with a concise verdict on which asset looks strongest right now and why.`,
11
+ ],
12
+ };
13
+ }
14
+ //# sourceMappingURL=compare-assets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compare-assets.js","sourceRoot":"","sources":["../../src/workflows/compare-assets.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAG1E,MAAM,UAAU,0BAA0B,CACxC,UAA8C;IAE9C,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEvD,OAAO;QACL,aAAa,EAAE,wBAAwB,CAAC,UAAU,CAAC;QACnD,SAAS,EAAE;YACT,+CAA+C,OAAO;;;+EAGmB;SAC1E;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { buildPortfolioWorkflow } from "./portfolio-builder.js";
2
+ export { buildCompareAssetsWorkflow } from "./compare-assets.js";
3
+ export { buildOptionsScreenerWorkflow } from "./options-screener.js";
4
+ export type { WorkflowPlan } from "./types.js";
@@ -0,0 +1,4 @@
1
+ export { buildPortfolioWorkflow } from "./portfolio-builder.js";
2
+ export { buildCompareAssetsWorkflow } from "./compare-assets.js";
3
+ export { buildOptionsScreenerWorkflow } from "./options-screener.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workflows/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACjE,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { OptionsScreenerSlots, SlotResolution } from "../routing/types.js";
2
+ import type { WorkflowPlan } from "./types.js";
3
+ export declare function buildOptionsScreenerWorkflow(resolution: SlotResolution<OptionsScreenerSlots>): WorkflowPlan;
@@ -0,0 +1,22 @@
1
+ import { buildOptionsScreenerPrompt } from "../prompts/workflow-prompts.js";
2
+ export function buildOptionsScreenerWorkflow(resolution) {
3
+ const initialPrompt = buildOptionsScreenerPrompt(resolution);
4
+ const s = resolution.resolved;
5
+ const contractType = s.direction === "bullish" ? "calls" : "puts";
6
+ const followUps = [
7
+ `Now rank and present the top ${contractType} for ${s.symbol}:
8
+ 1. From the option chain data, select the top 3-5 contracts matching: ${s.moneynessPreference} strikes, DTE near ${s.dteTarget}, with ${s.liquidityMinimum}.
9
+ 2. Rank by ${s.objective}: balance premium cost, delta exposure, and probability of profit. Only include contracts with |delta| >= 0.20.
10
+ 3. Present a table: strike, expiry, premium, delta, IV, open interest, bid-ask spread.
11
+ 4. Explain why the #1 pick is ranked highest.
12
+ 5. State all assumptions used (which were defaults vs user-specified vs saved preferences).
13
+ 6. Include risk caveats: max loss = premium, IV crush risk, time decay (theta).
14
+
15
+ Length constraints:
16
+ - Max 1 sentence explaining the #1 pick.
17
+ - Risk caveats: max 3 bullet points.
18
+ - Keep total response under 30 lines.`,
19
+ ];
20
+ return { initialPrompt, followUps };
21
+ }
22
+ //# sourceMappingURL=options-screener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options-screener.js","sourceRoot":"","sources":["../../src/workflows/options-screener.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,0BAA0B,EAAE,MAAM,gCAAgC,CAAC;AAG5E,MAAM,UAAU,4BAA4B,CAAC,UAAgD;IAC3F,MAAM,aAAa,GAAG,0BAA0B,CAAC,UAAU,CAAC,CAAC;IAC7D,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC;IAC9B,MAAM,YAAY,GAAG,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC;IAElE,MAAM,SAAS,GAAG;QAChB,gCAAgC,YAAY,QAAQ,CAAC,CAAC,MAAM;wEACQ,CAAC,CAAC,mBAAmB,sBAAsB,CAAC,CAAC,SAAS,UAAU,CAAC,CAAC,gBAAgB;aAC7I,CAAC,CAAC,SAAS;;;;;;;;;sCASc;KACnC,CAAC;IAEF,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PortfolioSlots, SlotResolution } from "../routing/types.js";
2
+ import type { WorkflowPlan } from "./types.js";
3
+ export declare function buildPortfolioWorkflow(resolution: SlotResolution<PortfolioSlots>): WorkflowPlan;
@@ -0,0 +1,26 @@
1
+ import { buildPortfolioPrompt } from "../prompts/workflow-prompts.js";
2
+ export function buildPortfolioWorkflow(resolution) {
3
+ const initialPrompt = buildPortfolioPrompt(resolution);
4
+ const s = resolution.resolved;
5
+ const followUps = [
6
+ `Now review the risk and diversification of this draft portfolio:
7
+ 1. Use analyze_correlation across all ${s.positionCount} candidates to check for concentration risk.
8
+ 2. Use analyze_risk on each position for volatility and max drawdown.
9
+ 3. If correlation is too high (>0.7 between any pair), suggest a replacement to improve diversification.
10
+ 4. Confirm the portfolio fits a ${s.riskProfile} risk profile with ${s.timeHorizon} horizon.`,
11
+ `Present the final portfolio draft as a structured summary:
12
+ - State all assumptions at the top (which parameters were defaults vs user-specified vs saved preferences).
13
+ - Present an allocation table: symbol, allocation %, dollar amount ($${s.budget.toLocaleString("en-US")} total), and one-line rationale per position.
14
+ - Include overall portfolio risk summary: estimated volatility, diversification quality, largest single risk.
15
+ - Suggest what to change for more growth or more safety.
16
+ - End with the standard disclaimer.
17
+
18
+ Length constraints:
19
+ - Max 1 sentence of rationale per position in the allocation table.
20
+ - Risk summary: max 3 bullet points.
21
+ - Growth/safety suggestions: max 2 bullet points each.
22
+ - Keep total response under 40 lines.`,
23
+ ];
24
+ return { initialPrompt, followUps };
25
+ }
26
+ //# sourceMappingURL=portfolio-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio-builder.js","sourceRoot":"","sources":["../../src/workflows/portfolio-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAGtE,MAAM,UAAU,sBAAsB,CAAC,UAA0C;IAC/E,MAAM,aAAa,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;IACvD,MAAM,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC;IAE9B,MAAM,SAAS,GAAG;QAChB;wCACoC,CAAC,CAAC,aAAa;;;kCAGrB,CAAC,CAAC,WAAW,sBAAsB,CAAC,CAAC,WAAW,WAAW;QAEzF;;uEAEmE,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC;;;;;;;;;sCASjE;KACnC,CAAC;IAEF,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;AACtC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export interface WorkflowPlan {
2
+ initialPrompt: string;
3
+ followUps: string[];
4
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/workflows/types.ts"],"names":[],"mappings":""}
package/package.json ADDED
@@ -0,0 +1,97 @@
1
+ {
2
+ "name": "opencandle",
3
+ "version": "0.1.0",
4
+ "description": "Financial trading & investing agent",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/Kahtaf/OpenCandle#readme",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/Kahtaf/OpenCandle.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/Kahtaf/OpenCandle/issues"
13
+ },
14
+ "type": "module",
15
+ "bin": {
16
+ "opencandle": "dist/cli.js"
17
+ },
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ },
23
+ "./tool-kit": {
24
+ "types": "./dist/tool-kit.d.ts",
25
+ "import": "./dist/tool-kit.js"
26
+ },
27
+ "./infra": {
28
+ "types": "./dist/infra/index.d.ts",
29
+ "import": "./dist/infra/index.js"
30
+ },
31
+ "./types": {
32
+ "types": "./dist/types/index.d.ts",
33
+ "import": "./dist/types/index.js"
34
+ },
35
+ "./providers": {
36
+ "types": "./dist/providers/index.d.ts",
37
+ "import": "./dist/providers/index.js"
38
+ }
39
+ },
40
+ "pi": {
41
+ "extensions": [
42
+ "./dist/pi/opencandle-extension.js"
43
+ ]
44
+ },
45
+ "keywords": [
46
+ "pi-package",
47
+ "opencandle",
48
+ "finance"
49
+ ],
50
+ "files": [
51
+ "dist"
52
+ ],
53
+ "scripts": {
54
+ "build": "tsc && chmod +x dist/cli.js",
55
+ "prepare": "npm run build",
56
+ "start": "tsx src/cli.ts",
57
+ "test": "vitest run",
58
+ "test:watch": "vitest",
59
+ "test:e2e": "tsx tests/e2e/tools.test.ts",
60
+ "test:e2e:cli": "tsx tests/e2e/cli.test.ts",
61
+ "test:e2e:providers": "tsx tests/e2e/providers.test.ts",
62
+ "version:patch": "npm version patch --no-git-tag-version",
63
+ "version:minor": "npm version minor --no-git-tag-version",
64
+ "version:major": "npm version major --no-git-tag-version",
65
+ "version:set": "npm version",
66
+ "prepublishOnly": "npm test",
67
+ "publish:dry": "npm publish --access public --dry-run",
68
+ "release:patch": "node scripts/release.mjs patch",
69
+ "release:minor": "node scripts/release.mjs minor",
70
+ "release:major": "node scripts/release.mjs major"
71
+ },
72
+ "engines": {
73
+ "node": ">=20.0.0"
74
+ },
75
+ "dependencies": {
76
+ "better-sqlite3": "^12.8.0",
77
+ "camoufox-js": "^0.9.3",
78
+ "playwright-core": "^1.58.2"
79
+ },
80
+ "peerDependencies": {
81
+ "@mariozechner/pi-agent-core": "*",
82
+ "@mariozechner/pi-ai": "*",
83
+ "@mariozechner/pi-coding-agent": "*",
84
+ "@sinclair/typebox": "*"
85
+ },
86
+ "devDependencies": {
87
+ "@mariozechner/pi-agent-core": "^0.63.1",
88
+ "@mariozechner/pi-ai": "^0.63.1",
89
+ "@mariozechner/pi-coding-agent": "^0.64.0",
90
+ "@sinclair/typebox": "^0.34.0",
91
+ "@types/better-sqlite3": "^7.6.13",
92
+ "@types/node": "^22.0.0",
93
+ "tsx": "^4.19.0",
94
+ "typescript": "^5.7.0",
95
+ "vitest": "^3.0.0"
96
+ }
97
+ }